为什么需要 arguments 对象
由于 JavaScript
允许函数有不定数目的参数,所以需要一种机制,可以在函数体内部读取所有参数。这就是 arguments
对象的由来。
- 通过
arguments[index]
获取函数运行时的参数 - 通过
arguments
的参数可在函数内部修改,且非严格模式下,修改arguments
对象会影响到实际的函数参数 -
arguments.length
可以判断函数调用时到底带几个参数
const fnn = function (num1,) {
console.log(arguments.length); // 3
console.log(arguments[0]); // 1
console.log(arguments[1]); // 2
console.log(arguments[2]); // 3
console.log(num1 === arguments[0]); // true
console.log(num2 === arguments[1]); // true
arguments[1] = 'wfly'
console.log(arguments[1]); // wfly
console.log(num2); // wfly
console.log(num2 === arguments[1]); // true
console.log(arguments[1000]); // undefined
}
fnn(1, 2, 3)
arguments 是类数组
arguments
是类数组,除了 length
属性和索引元素之外没有任何 Array
属性
arguments转数组方法
// slice 方法
var args = Array.prototype.slice.call(arguments);
var args = [].slice.call(arguments);
// Array.from
const args = Array.from(arguments);
// 扩展运算符
const args = [...arguments];
// 循环
const args = [];
for (let i = 0; i < arguments.length; i++) {
args.push(arguments[i]);
}
callee 属性
callee
:返回它所对应的原函数。
const fnn = function () {
console.log(arguments.callee === fnn);
}
fnn() // true
非严格模式下,可以通过
arguments.callee
,达到调用函数自身的目的