Array.slice.call的问题
发布于 8 年前 作者 captainblue2013 3947 次浏览 来自 问答

Array.slice.call( [ 1 , 2 , 3 ],1 ) 和 [ 1 , 2 , 3 ].slice(1)

区别只是习惯不一样吗?

4 回复

前面少了个.prototype 如果对纯数组,是一样的,如果是类数组对象,只能前者,可以看一下ecma的定义,这个方法没有检测操作数组是否是一个真正数组,就像鸭式辩型里面说的一样 From Noder

Array.prototype.slice.call(obj)这时obj可以是类数组对象,如arguments [1,2,3].slice()是数组的实例方法,因为[1,2,3]是一个数组实例, 而arguments不是纯数组实例,也就是说arguments对象本身是没有slice方法的,只能用Array.prototype.slice.call(arguments)

直接 [].slice.call

@magicdawn [].slice 会创建一个新的数组实例 Array.prototype.slice.call 不会

回到顶部