arguments 对象
在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。
例如,在函数 sayHi() 中,第一个参数是 message。用 arguments[0] 也可以访问这个值,即第一个参数的值(第一个参数位于位置 0,第二个参数位于位置 1,依此类推)。
因此,无需明确命名参数,就可以重写函数:
function sayHi() {
if (arguments[0]
== "bye") {
return;
}
alert(arguments[0]);
}
检测参数个数
还可以用 arguments 对象检测函数的参数个数,引用属性 arguments.length 即可。
下面的代码将输出每次调用函数使用的参数个数:
function howManyArgs() { alert(arguments.length); } howManyArgs("string", 45); howManyArgs(); howManyArgs(12);
上面这段代码将依次显示 "2"、"0" 和 "1"。
注释:与其他程序设计语言不同,ECMAScript 不会验证传递给函数的参数个数是否等于函数定义的参数个数。开发者定义的函数都可以接受任意个数的参数(根据 Netscape 的文档,最多可接受 255 个),而不会引发任何错误。任何遗漏的参数都会以 undefined 传递给函数,多余的函数将忽略。
模拟函数重载
用 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"
当只有一个参数时,doAdd() 函数给参数加 5。如果有两个参数,则会把两个参数相加,返回它们的和。所以,doAdd(10) 输出的是 "15",而 doAdd(40, 20) 输出的是 "60"。
虽然不如重载那么好,不过已足以避开 ECMAScript 的这种限制。
相关推荐
实际上,函数体内可以通过 arguments 对象来接收传递进来的参数。 代码如下: function box() { return arguments[0]+’ | ‘+arguments[1]; //得到每次参数的值 } alert(box(1,2,3,4,5,6)); //传递参数 ...
ECMAScript中的函数并不介意传递的参数有多少,也不介意是什么类型。由于JavaScript允许函数有不定数目的参数,所以我们需要...这就是arguments对象的由来。这篇文章将详细介绍Javascript中的arguments对象和使用方法。
7.7.4没有arguments对象 65 7.7.5定义方法时使用箭头函数 65 7.7.6不能用作构造函数 65 7.7.7没有原型 65 7.7.8不能作为生成器 65 7.7.9返回对象字面量 65 7.8小结 65 第8章集合和映射 67 8.1Set 67 8.1.1基本语法 ...
箭头函数是ECMAScript 6最受关注的更新内容之一。它引入了一种用「箭头」(=>)来定义函数的新语法,它…...更不能通过arguments对象访问传入参数。只能使用显式命名或其他ES6新特性来完成。这些差异的存在是有理可循的
我们知道JS函数内部有个arguments对象,可以拿到全部实参。现在ES6给我们带来了一个新的对象,可以拿到除开始参数外的参数,即剩余参数(废话好多 O(∩_∩)O~)。 这个新的对象和arguments不一样,它是程序员自定义...
2.8.2 用arguments对象访问函数的参数 2.8.3 实例:杨辉三角 2.9 其他对象 2.9.1 对象简述 2.9.2 时间日期:Date对象 2.9.3 数学计算:Math对象 2.10 BOM基础 2.10.1 window对象 2.10.2 ...
(2) 关于函数的arguments对象 9 在函数代码中,使用特殊对象 arguments,开发者无需明确指出参数名,就能访问它们。 9 使用arguments.length检测参数个数 9 模拟函数重载 10 (3) Function对象(类) 10 ...
在ECMAScript 6之前,JavaScript有一个变量来访问这些未知或可变数目的参数,这是一个类似数组的对象,并非一个数组。细想以下代码来理解arguments变量: function add(){ var result = 0; for(let i=0;i<...
2.8.2 用arguments对象访问函数的参数 2.8.3 实例:杨辉三角 2.9 其他对象 2.9.1 对象简述 2.9.2 时间日期:Date对象 2.9.3 数学计算:Math对象 2.10 BOM基础 2.10.1 window对象 ...
值得庆幸的是,我们可以通过数组的 slice 方法将 arguments 对象转换成真正的数组: var args = Array.prototype.slice.call(arguments);对于slice 方法,ECMAScript 262 中 15.4.4.10 Array.prototype.slice (start...
2.11.2 arguments 对象..............................................53 2.11.3 Function 类..............................................54 2.11.4 闭包..............................................56 ...