1.定义
在JavaScript中,arguments实际上是当前函数的一个内置对象。arguments是一个类似于数组的对象,它存储了函数传递的所有实参。可以使用length属性和索引元素,但不能使用数组方法。
arguments展示形式是一个伪数组,因此可以进行遍历。
伪数组的特点:
- 具有length属性
- 按索引方式储存数据
- 不具有数组pop,push等方法
2.作用
js语法不支持重载,但可以利用arguments对象模拟重载效果。
3.特性
arguments对象和Function是分不开的。因为arguments这个对象不能显式创建,arguments对象只有函数开始时才可用。
箭头函数没有自己的arguments,它的arguments都是在定义函数时绑定外层的arguments,而不是在执行过程中绑定的,所以不会因为调用者不同而发生变化。
4.使用方法
虽然arguments对象并不是一个数组,但是访问单个参数的方式与访问数组元素的方式相同。 arguments[i] 在js中不需要明确指出参数名,就能访问它们。
5.arguments上的属性
- arguments.callee:指向当前执行的函数(在 严格模式 下,第5版 ECMAScript (ES5) 禁止使用
arguments.callee())。 - argunments.length:指向传递给当前函数的参数数量。
- arguments.caller:已移除。
6.arguments虽然不是一个数组,但是它可以被转换为一个真正的Array。
// 方法一
Array.prototype.hyslice = function () {
var newArr2 = [];
for (let i = start; i < arguments.length; i++) {
newArr2.push(arr[arguments[i]])
}
return newArr2;
}
// 方法二
var newArr1 = [].slice.call(arguments);
var newArr2 = Array.prototype.slice.call(arguments);
// 方法三 ES6
var arr1 = Array.from(arguments);
var arr2 = [...arguments];
补充:
什么是重载?
指函数的方法名相同,但参数不同
输出结果为NaN 6,这就说明后面的函数把前一个同名函数覆盖掉了,从而可以得出js函数不存在重载,永远调用最后一个方法。
JS函数不存在重载,但是我们可以实现js里面的模拟重载
arguments.length是有实参决定,即函数调用时候里面的参数个数决定!