arguments对象
arguments对象是function(非箭头函数)中一个特殊的局部变量。
在ECMA262中对它是这么描述的:
其数组索引属性映射到其相关函数调用的形式参数绑定
我们可以看出它的内容,跟函数的形参有关,看下面的例子
function test(){
console.log(arguments);
}
test(1,2);
test(1,2,3,4);

从arguments对象输出的内容我们可以看出
- arguments内部的元素,跟函数实际传入参数的数值一致
- 其index对应的数值,跟实际参数出传入的顺序也是一一对应的
- 函数每次执行有自己的arguments对象

对比
arguments
和array实例
,我们可以看出来,首先它们相似的地方,就是都能够以这种index:value
的实行保存值,但是他们的__proto__
说明了他们不是同一个类型。arguments的原型指向的是Object,而array的原型指向的是Array,所以arguments严格来说不是个数组,一般我们把它称作是
伪数组
或者类数组
。arguments和array的异同点,我们可以简单总结为
同:
- 都有内置的length属性,保存值的方式都是index:value形式
异: - 原型不同,arguments原型是Object,因此不能调用Array原型上的各种操作方法
- arguments有内置的
Symbol(Symbol.iterator)
属性
我们看到,arguments里面有Symbol(Symbol.iterator)
属性,看到这个属性,如果我们了解Iterator
的话,就知道,说明arguments是可以被for..of遍历的,所以,它可以被转换成一个数组对象。
arguments转为Array
Array.prototype.slice.call(arguments);
[].slice.call(arguments);
Array.prototype.slice
方法不要求其this
一定要是Array Object,只要当前this
具有length
属性以及形如index:value
这种数据形式就可以转换为Array。
ECMA262-sec-array.prototype.slice
所以用call
把slice
当前方法改为arguments
,最后就可以返回一个由arguments转换而来的新数组。
MDN-arguments
JavaScript arguments 对象全面介绍
网友评论