1:for ... in
对Array
的循环得到的是String
而不是Number
var a = ['A', 'B', 'C'];
for (var i in a) {
alert(i); // '0', '1', '2'
alert(a[i]); // 'A', 'B', 'C'
}
2:
for ... in
循环,array
的length
属性却不包括在内。
for ... of
循环则完全修复了这些问题,它只循环集合本身的元素:
3:arguments
,它只在函数内部起作用,并且永远指向当前函数的调用者传入的所有参数
为了获取除了已定义参数a
、b
之外的参数,ES6标准引入了rest参数,
function foo(a, b, ...rest) {
console.log('a = ' + a);
console.log('b = ' + b);
console.log(rest);
}
foo(1, 2, 3, 4, 5);
// 结果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]
4:
为了解决块级作用域,ES6引入了新的关键字
let
,用
let
替代
var
可以申明一个块级作用域的变量
ES6标准引入了新的关键字const
来定义常量,const
与let
都具有块级作用域:
5:
由于this
在箭头函数中已经按照词法作用域绑定了,所以,用call()
或者apply()
调用箭头函数时,无法对this
进行绑定,即传入的第一个参数被忽略:
var obj = {
birth: 1990,
getAge: function (year) {
var b = this.birth; // 1990
var fn = (y) => y - this.birth; // this.birth仍是1990
return fn.call({birth:2000}, year);
}
};
obj.getAge(2015); // 25