- 箭头函数中不再支持
arguments
,只能使用...rest
语法 arguments
不是纯正的数组类型,无法使用数组的函数arguments
只能获取全部实参值,不能有所选择- 要想
arguments
实现同等的效果:[].slice.call(arguments,1)
(此处的1为传入的值)
关于上面的不能使用数组方法的一条,我们可以简单的对比一下 for in 和 for of 来加深理解
for in
遍历的是key
并且key
是String
字符串类型,是无法进行数学运算的,它会把所有可枚举的属性全部罗列出来,包括后加的原型对象上面的方法;for of
遍历的是value
,并且只会遍历数组的元素;forEach
不可以使用break,continue
结束循环,不可以使用return
返回,空数组不执行;不可以遍历对象;for of
适用遍历数组、类1数组对象、字符串、map
、set
等拥有迭代器对象的,但是不能遍历对象,相比较forEach
,可以正确响应break、continue、return
;- 所有拥有
Symbol.iterator
的对象被称为可迭代的;可迭代对象的概念几乎贯穿于整门语言之中,不仅是for of
循环,还有Map
、Set
构造函数、解构赋值,以及新的展开操作符。
对于上面提到了 call
这边顺便说一下 call,apply,bind
之间的使用区别
- 首先他们都是为了改变
this
指向而生的 call
和apply
都是直接使用,他们之间的区别是传入参数的不同,call
是直接传入,apply
是数组的形式传入;如下:
obj.call(target, arg1, arg2, ...);
obj.apply(targetj, [arg1, arg2, ...]);
bind
传入的参数是和call
一样的,不过它返回的是一个函数,必须再使用()
执行一下才可。
这边只是做了一个简单的对比,大家想要深入的学习的话,可以尝试着自己去实现一下这三个方法。