arguments类数组对象详解
arguments对象保存着函数被调用时的参数列表,它是一个类数组对象,有一个length属性但没有任何数组的方法。
它不能像数组一样,进行排序操作或者往集合里添加一个新的元素。
所以我们经常非常频繁的找Array.prototype对象借用方法。
像Array.prototype.slice可以把arguments转成真正的数组;想截去arguments列表中头一个元素时,又可以借用Array.prototype.shift方法。
要了解这种机制的实现原理,需要查看一下V8引擎的源码,比如Array.prototype.push:
1 | function ArrayPush(){ |
可见Array.prototype.push实际上是一个属性复制的过程,把参数按照下标依次添加到被push的对象上面,顺便修改了这个对象的属性。所以只要是个对象,不管是数组对象还是类数组对象,都可以操作。