一、类型,值和变量
1.构造函数
函数用来初始化一个新建的对象,我们称为构造函数。每个构造函数定义了一类对象(由构造函数初始化的对象组成的集合)
数组类,函数类,日期类,正则类,错误类
2.Math对象的复杂运算:
Math.pow(2,53) //2的53次幂
Math.round(.6) //四舍五入
Math.ceil(.6) //向上求整
Math.floor(.6) //向下求整
Math.abs(-5) //求绝对值
Math.sqrt(3) //3的平方根
Math.log(10) //10的自然对数
Math.exp(e) //e的三次幂
3.NaN
没有办法通过x==NaN来判断变量x是否是NaN。应该用x!=x来判断,当x=NaN时为true。函数isNaN()的作用与此类似,若参数是NaN或一非数字值,返回true。isFinite(),参数不是NaN,Infinity或-infinity时返回true
4.Date()构造函数
var then = new Date(2011, 0, 1) //2011年1月1日
var later= new Date(2011, 0, 1, 17, 10, 30) //2011年1月1日 5:10:30pm
var now = new Date() //当前日期和时间
var elasped = now - then //计算时间间隔的毫秒数
later.getFullYear() //2011
later.getMonth() //0 从零计算月份
later.getDate() //1 从1计算天数
later.getDay() //5 得到星期几0代表星期日5代表星期一
later.getHours() //当地时间17 :5pm
later.getUTCHours() //UTC表示小时的时区
5.JavaScript转义字符
\o NUL字符 \b 退格符 \t 水平制表格 \n 换行符 \v 垂直制表符 \f 换页符 \r 回车符
\" 双引号 \' 单引号 \\ 反斜线
6.字符串方法
var s = "hello, world"
s.charAt(0) //第一个字符 h
s.charAt(s.length - 1) //最后一个字符 d
s.substring(1, 4) //第2~4个字符
s.slice(1, 4) //第2~4个字符
s.slice(-3) //最后3个字符
s.indexOf("l") //字符l第一次出现的位置
s.lastIndexOf("l") //字符l最后一次出现的位置
s.split(",") // ['hello", "world"]分割成子串
s.replace("h", "H") //全文字符替换
7.数字转化为字符串3种方法
var n = 123456.789;
n.toFixed(0); //"123456"
n.toFixed(2); //"123456.79"
n.toFixed(5); //"123456.78900"
n.toExponential(1); //"1.2e+5"
n.toExponential(3); //"1.235e+5"
n.toPrecision(4); //"1.235e+5"
n.toPrecision(7); //"123456.8"
n.toPrecision(10); //"123456.7890
8.转化为数字
Number(), parseInt(), parseFloat()
9.检测属性
10.获得属性描述符
11.数组方法
可以用Object.defineProperty()让数组的length属性变成只读
join(): 将数组所有元素转化为字符串连接起来
reverse() : 将数组元素颠倒顺序,返回逆序的数组
sort() : 将数组里的元素排序
concat() : 创建并返回一个新数组
concat()可用于深拷贝
var newarr = arr.concat([]);
slice() : 返回指定数组的一个片段或子数组,不会修改调用数组
splice() : 在数组中插入或删除元素的通用方法,会修改调用数组
push() : 在数组尾部添加一个或多个元素
pop() : 删除数组最后一个元素,减小数组长度并返回它删除的值
unshift() : 在数组头部添加一个或多个元素
shift() : 删除数组第一个元素,减小数组长度并返回它删除的值
12.ES5数组方法
forEach() : 从头到尾遍历数组,为每个元素调用指定函数,三个参数分别:数组元素,元素索引,数组本身
var data = [1,2,3,4,5];
data.forEach(function(v, i, a) { a[i] = v + 1}); //[2,3,4,5,6]
若想提前中止遍历,必须将方法放到try块中
map() : 将调用数组的每个元素传递给指定函数,并返回一个数组,包含函数的返回值
filter() : 返回数组元素是调用的数组的一个子集
every() : 当且仅当针对数组中的所有元素调用判定函数都返回true,才返回true
some() : 当数组中至少有一个元素调用判定函数返回true,就返回true
reduce() 和 reduceRight() : 使指定的函数将数组元素进行组合,生成单个值
var a = [1,2,3,4,5];
var sum = a.reduce(function(x,y) {return x+y},0); //数组求和 15
var max = a.reduce(function(x,y) {return (x>y)?x:y} ); // 求最大值
indexOf() 和 lastIndexOf() : 搜索整个数组中具有给定值的元素,返回找到的第一个元素返回其索引值,没有找到返回-1, indexOf() 是从头搜索,lastIndexOf()则反向搜索。
13.闭包
函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种特性称为闭包
14.判断参数个数
15.call()与apply()
通过调用方法的形式来间接调用函数
f.call(o,1,2);
f.apply(o, [1,2]);
var biggest = Math.max.apply(Math, array_of_numbers);
16.函数式编程
创建子类
B.prototype = inherit(A.prototype); //子类派生来自父类
B.prototype.constructor = B; //重载继承来的constructor属性
防止类的扩展
Object.seal()可以阻止用户给对象添加新属性,还能将当前已有的属性设置为不可配置的。Object.freeze()相同
17.正则表达式
正则表达式是一个描述字符模式的对象。进行强大的模式匹配和文本检索与替换功能,JS中正则表达式用RegExp对象表示
任意表达式都可以作为锚点条件。如果在‘(?=)’和‘)’之间加一个表达式,他就是一个先行断言,说明圆括号中的表达式必须正确匹配,例如 /[Jj]ava([Ss]cript)?(?=\:)/ 可以匹配“Javascript: The great language”中的 Javascrip,但是不匹配“Java is good”中的Java。 带有“(?!”的断言是负向先行断言
18.用于模式匹配的String方法
String支持4种正则表达式的方法
(1)search(),参数是一个正则表达式,返回第一个与之匹配的子串的起始位置,如果找不到匹配的子串就返回-1
“JavaScript”.search(/script/i); //返回4
search不支持全局检索
(2) replace()方法用于检索和替换操作
text.replace(/javascript/gi, "JavaScript"); // 将所有不区分大小写的javascript都替换成JavaScript
(3) match()返回的是一个由匹配结果组成的数组
(4) split() 将调用它的字符串拆分成一个子串组成的数组
19.数组推导
20.在HTML里嵌入JavaScript
- 内联,放在<script></script>之间
- 放置在<script>标签的src属性指定的外部文件
- 放置在HTML事件处理程序里,该事件处理程序由onclick或onmouseover这样的HTML属性值指定
- 放在一个URL里,这个URL使用特殊的"javasccript:"协议
21.载入新的文档
22.对话框
除了alert(),confirm()和prompt()方法,还有一个包含HTML的“模态对话框”,showModalDialog()可以给它传参数并获取返回值,第一个参数用于提供对话框HTML内容的URL。第二个参数是一个任意值,这个值在对话框的脚本中可以通过window.dialogArgments属性的值访问。第三个参数是一个非标准的列表,包含以分号隔开的name=value对,如果提供这个参数,可以配置对话框的尺寸和其他属性