Arguments对象是仅存在于Function中的特殊对象,类数组但不是数组。由于JS函数参数数量的不确定性,学会操作arguments对象特别重要。
于是在浏览器F12开发者工具做个实验:
function testArg(a, b, c){
console.log(Object.prototype.toString.call(arguments));
console.log(arguments);
console.log(arguments[1]);
console.log([...arguments]);
console.log(arguments.length);
console.log(arguments.callee);
}
执行testArg(1,2,3,4)得到
result
总结:
- function的arguments属于Arguments对象,不是Array。
- Arguments对象是一个类数组,可以用arguments[index]获取参数值,arguments.length返回了函数执行时接收的实际参数数量。
引申(遍历arguments):可以用for循环按index = 0 ~ arguments.length-1遍历arguments。 - Arguments对象可以通过[...arguments]方法来转换成数组。
转换数组其他方法:
for循环,值加入新的空数组。
let argArr = Array.prototype.slice.call(arguments)。
let argArr = [].slice.call(arguments)。
let argArr = Array.from(arguments)。 - arguments.callee 引用该函数的函数体内当前正在执行的函数, 可用于匿名函数内调用自身 (严格模式下禁用)。