JavaScript的arguments对象应用示例


Posted in Javascript onSeptember 15, 2014

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 的这种限制。

Javascript 相关文章推荐
JavaScript 加号(+)运算符号
Dec 06 Javascript
JavaScript表格常用操作方法汇总
Apr 15 Javascript
跟我学习javascript的var预解析与函数声明提升
Nov 16 Javascript
JS函数的几种定义方式分析
Dec 17 Javascript
jQuery toggle 代替方法
Mar 22 Javascript
MVC+jQuery.Ajax异步实现增删改查和分页
Dec 22 Javascript
简单掌握JavaScript中const声明常量与变量的用法
May 21 Javascript
Bootstrap3.0学习教程之JS折叠插件
May 27 Javascript
easyui messager alert 三秒后自动关闭提示的实例
Nov 07 Javascript
jQuery中clone()函数实现表单中增加和减少输入项
May 13 jQuery
详解ElementUI之表单验证、数据绑定、路由跳转
Jun 21 Javascript
微信小程序点击列表跳转到对应详情页过程解析
Sep 26 Javascript
avascript中的自执行匿名函数应用示例
Sep 15 #Javascript
JavaScript function 的 length 属性使用介绍
Sep 15 #Javascript
css与javascript跨浏览器兼容性总结
Sep 15 #Javascript
一个通过script自定义属性传递配置参数的方法
Sep 15 #Javascript
一个字符串反转函数可实现字符串倒序
Sep 15 #Javascript
jquery实现类似淘宝星星评分功能有截图
Sep 15 #Javascript
javascript使用数组的push方法完成快速排序
Sep 15 #Javascript
You might like
PHP 组件化编程技巧
2009/06/06 PHP
php日期转时间戳,指定日期转换成时间戳
2012/07/17 PHP
解析PHP正则提取或替换img标记属性
2013/06/26 PHP
Yii实现MySQL多数据库和读写分离实例分析
2014/12/03 PHP
使用GDB调试PHP代码,解决PHP代码死循环问题
2015/03/02 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
Yii2框架实现数据库常用操作总结
2017/02/08 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
PHP使用openssl扩展实现加解密方法示例
2020/02/20 PHP
改进:论坛UBB代码自动插入方式
2006/12/22 Javascript
javascript Array.prototype.slice使用说明
2010/10/11 Javascript
jQuery 1.7.2中getAll方法的疑惑分析
2012/05/23 Javascript
CSS鼠标响应事件经过、移动、点击示例介绍
2013/09/04 Javascript
jQuery结合CSS制作动态的下拉菜单
2015/10/27 Javascript
javascript中利用柯里化函数实现bind方法【推荐】
2016/04/29 Javascript
AngularJS实现分页显示数据库信息
2016/07/01 Javascript
JS高级运动实例分析
2016/12/20 Javascript
Vue实现回到顶部和底部动画效果
2019/07/31 Javascript
vue中的 $slot 获取插槽的节点实例
2019/11/12 Javascript
vue 开发之路由配置方法详解
2019/12/02 Javascript
vue 检测用户上传图片宽高的方法
2020/02/06 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
python中pandas.DataFrame对行与列求和及添加新行与列示例
2017/03/12 Python
Python实现学校管理系统
2018/01/11 Python
pygame实现简易飞机大战
2018/09/11 Python
使用Python实现在Windows下安装Django
2018/10/17 Python
利用Python中的Xpath实现一个在线汇率转换器
2020/09/09 Python
浅析python连接数据库的重要事项
2021/02/22 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
HTML5中判断横屏竖屏的方法(移动端)
2016/08/04 HTML / CSS
时装界的“朋克之母”:Vivienne Westwood
2017/07/06 全球购物
2014年物业管理工作总结
2014/11/21 职场文书
大明湖导游词
2015/02/03 职场文书
企业安全生产规章制度
2015/08/06 职场文书
2019消防宣传标语!
2019/07/10 职场文书
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL