arguments

arguments是函数内部自带类数组对象。保存函数执行时的实际参数。

// 声明函数,声明语句中书写的参数都是形参
function fun(a,b,c){
// arguments是函数内部自带的对象
console.log(arguments);
console.log(typeof(arguments));
}
// 函数的执行 fun(1,2,3,4,5,6,7);

执行结果:Arguments(7) [1, 2, 3, 4, 5, 6, 7, callee: ƒ, Symbol(Symbol.iterator): ƒ]      object

返回的是一个类数组对象,并且把所有的值都返回,如果没有arguments,则只会返回前三个数。arguments返回的是所有的实际参数。

arguments与数组不相同的地方

读取数据和数组的方式相同  [index]

console.log(arguments[0]);

赋值方式  =

console.log(arguments[0]=100);

length属性

console.log(arguments.length);

arguments只能通过length属性强制将数组拉长,不能通过索引值

索引值方法

arguments[10]=10;
console.log(arguments.length);

长度依然是7,没有改变

length属性方法

arguments.lengtn=10;
console.log(arguments.length);
console.log(arguments);

长度变为10,没有赋值的显示undefined

arguments与数组不相同的地方

slice方法(数组截取,start包括,end不包括)

console.log(arguments.slice(1,5));

error

用途

重载:函数名相同,参数个数不同

在js中没有重载现象,函数名相同,参数个数不同,表示的是相同的函数,后面会层叠前面的。

       // 函数名相同,参数个数不同
        function fun(a){
            console.log(1);
        }
        function fun(a,b,c){
            console.log(2);
        }
        // 调用函数
        fun();

输出结果是2,只要调用输出都是2,所以在js中不能实现重载

利用arguments可以模拟函数的重载

需求:当参数个数为2个时,两个参数相加;当参数个数为3个时,前两个参数的较大值加上第三个参数;当参数个数大于3个时,输出错误

function fun(a,b,c){
            if(arguments.length===2){
                return a+b;
            }else if(arguments.length===3){
                return a > b ? a : b;
            }else{
                return "error";
            }
        } 

类数组对象:对于一个普通的对象来说,如果它的所有property名均为正整数,同时也有相应的length属性,那么虽然该对象并不是由Array构造函数所创建的,它依然呈现出数组的行为,在这种情况下,这些对象被称为“类数组对象”。

var o ={0:42,1:52,2:63,length:3}
console.log(0);
// 输出为42
console.log(Array.prototype.join.call(o));
// 在类数组对象上应用数组的操作方法,在ECMAScript 5标准中,
// 可以用以上方法来将上面的对象o合并成字符串
// 输出为"42,52,63"
原文地址:https://www.cnblogs.com/tasly/p/11524864.html