arguments对象是一个伪数组
arguments并不是一个数组,只是与数组相似, 除了拥有length属性,数组的所有属性和方法都不具备
arguments对象的使用
使用特殊对象 arguments时无需明确指出参数名,就可以访问它们.
例如:在write函数中,如果需要访问其第一个参数 words1 ,不用指明其具体参数名,用 arguments[0] 就可以访问这个值(该函数第一个参数的值)。
function write() {
if (arguments[0] == "hello") {
return;
}
alert(arguments[0]);
}
用arguments对象检测参数个数
可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可
function judjenum() {
console.log(arguments.length);
}
judjenum("string", 45);
// 返回 2
judjenum();
// 返回 0
judjenum(12);
// 返回 1
- 注意点:
在其它语言中实参个数必须和形参个数一致,但是JavaScript中没有函数签名的概念,实参个数和形参个数可以不相等,实参若超过形参个数,超过的都会以 undefined 传递给函数
用 arguments 对象判断传递给函数的参数个数
用 arguments 对象判断传递给函数的参数个数,即:模拟函数重载
function doAdd() {
if(arguments.length == 1) {
alert(arguments[0] + 5);
} else if(arguments.length == 2) {
alert(arguments[0] + arguments[1]);
}
}
doAdd(10);
//输出 "15"
doAdd(40, 20);
//输出 "60"
用 arguments 对象比较形参与实参个数是否一致
function sum(num1,num2){
console.log(arguments.length);
// 返回 2
console.log(sum.length);
// 返回 2
console.log(arguments.length == sum.length);
// 返回 true
}
sum(10,20);
用 arguments.callee属性可判断/返回当前函数
callee是arguments对象的一个属性,该属性是一个指针, 指向拥有这个arguments对象的函数
function sum(num1,num2){
console.log(arguments.callee);
}
sum(10,20);
运行结果:
【部分内容摘录自:ECMAScript arguments 对象】