arguments 对象
arguments 是一个对应于传递给函数的参数的类数组
对象。它存在着length属性,但是不存在其他所有的数组方法。是所有(非箭头)函数中都可用的局部变量。可以使用arguments 对象在函数中引用函数的参数。此对象包含传递给函数的每个参数,第一个参数在索引0处。
例子:
function testArguments(){
console.log(...arguments)//test 2 3 4
console.log(arguments[0])//test
}
testArguments('test',2,3,4)
箭头函数是没有
arguments 对象的,
arguments 是函数中必有的对象,用来读取调用该函数的参数。
arguments 对象不是数组,但可以通过 Array.prototype.slice.call(arguments) 方式转化为数组,进而使用数组的方法。
function testArguments(){
console.log(Array.prototype.slice.call(arguments))// ['test', 2, 3, 4]
}
testArguments('test',2,3,4)
arguments[@@iterator] 返回一个新的Array迭代器对象,该对象包含参数中每个索引的值。可以进行for...of循环。
function testArguments(){
for(let item of arguments){
console.log(item)//test 2 3 4
}
}
testArguments('test',2,3,4)
剩余参数
如果函数的最后一个命名参数以 ... 为前缀,则它将成为一个由剩余参数组成的真数组。
function testArguments(a,...arg){
console.log(arg)//[2, 3, 4]
}
testArguments('test',2,3,4)
剩余参数和 arguments对象之间的区别主要有三个:
- 剩余参数只包含那些没有对应形参的实参,而
arguments
对象包含了传给函数的所有实参。 arguments
对象不是一个真正的数组,而剩余参数是真正的 Array实例,也就是说你能够在它上面直接使用所有的数组方法。arguments
对象还有一些附加的属性(如callee
属性)。