JS 函数实参转换为数组
实际参数在函数中我们可以使用 arguments 对象获得 (注:形参可通过 arguments.callee 获得),虽然 arguments 对象与数组形似,但仍不是真正意义上的数组。
0: […arguments]
这个方法其实是用来代替下边方法一的
一:通过 Array.prototype
属性调用 slice 方法
1 | const args = Array.prototype.slice.call(arguments) |
Array 本身是没有 slice 方法,它的方法在 Array.prototype中,而我们在调用 slice 方法的时候,如果在 Array 本身没有找到 slice 方法的话,会通过它的原型链往上查找。
二. 通过调用[]的slice方法
1 | const args = [].sclice.call(arguments, 0) |
注意这里是[], 不是 Array,为什么呢? 先看下边
1 | typeof []; // object |
从上面很清楚的知识 Array
是一个构造函数,而 [] 是 Array 的实例, 等价于 new Array()
,因为实例的__proto__
指向该实例的构造函数的prototype
;
但是这里 [] === new Array // false
是 false
, 因为对象是不能直接比较的
三. 通过遍历arguments,返回数组
1 | function toArray(){ |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Lee Blog!