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"