Javascript中arguments对象的详解与使用方法


Posted in Javascript onOctober 04, 2016

一、arguments使用方法

通过方括号语法访问每一个元素

var fun = function(one) {
 console.log(arguments[0]);
 console.log(arguments[1]);
 console.log(arguments[2]);
}
fun(1, 2, 3)
// 1
// 2
// 3

通过length属性,查看到底要几个参数

function fun() {
 return arguments.length;
}
fun(1, 2, 3) // 3
fun(1) // 1
fun() // 0

参数赋值(“严格模式下不允许”)

var fun = function(a, b) {
 arguments[1] = 2;
 return a + b;
}
fun(1, 1)
// 3

二、arguments与数组的关系

虽然arguments可以使用中括号语法,并且具有length属性,但arguments对象只是与数组类似,并不是Array的实例。因此,无法对 arguments 变量使用标准的数组方法,比如 push, pop 或者 slice。 虽然使用 for 循环遍历也是可以的,但是为了更好的使用数组方法,最好把它转化为一个真正的数组。

如何使用数组方法?

通过apply方法,把arguments作为参数传进去,这样就可以让arguments使用数组方法了。

// 用于apply方法
myFunction.apply(obj, arguments).
// 使用与另一个数组合并
Array.prototype.concat.apply([1,2,3], arguments)

终极解决方法,直接转为真正的数组

下面的代码将会创建一个新的数组,包含所有 arguments 对象中的元素。

var args = Array.prototype.slice.call(arguments);
//或者
var args = [];
for (var i = 0; i < arguments.length; i++) {
 args.push(arguments[i]);
}
//或者
var args = [].slice.call(arguments, 0);

三、强大却不建议使用的callee属性

arguments的callee属性可以调用函数本身,当函数正在执行时才可调用,可以实现方法的递归调用

下面的代码将会实现一个求阶乘方法

var factorial = function(x){
 return x<=1?1:x*arguments.callee(x-1);
}

在ECMAScript5严格模式中,对这个属性的读写操作会产生一个类型错误,并且会显著的影响现代 JavaScript 引擎的性能,所以,因此强烈建议大家不要使用 arguments.callee 和它的属性。

四、总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习和工作能带来一定的帮助,如果有疑问大家可以留言交流。

Javascript 相关文章推荐
javascript实现仿银行密码输入框效果的代码
Dec 13 Javascript
网站页面自动跳转实现方法PHP、JSP(上)
Aug 01 Javascript
非常强大的 jQuery.AsyncBox 弹出对话框插件
Aug 29 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
Dec 08 Javascript
fmt:formatDate的输出格式详解
Jan 09 Javascript
angularJS 指令封装回到顶部示例详解
Jan 22 Javascript
input获取焦点时底部菜单被顶上来问题的解决办法
Jan 24 Javascript
实例详解display:none与visible:hidden的区别
Mar 30 Javascript
解决jQuery使用append添加的元素事件无效的问题
Aug 30 jQuery
react项目实践之webpack-dev-serve
Sep 14 Javascript
vue写h5页面的方法总结
Feb 12 Javascript
使用typescript构建Vue应用的实现
Aug 26 Javascript
js判断浏览器是否支持严格模式的方法
Oct 04 #Javascript
浅谈jquery高级方法描述与应用
Oct 04 #Javascript
vue.js中$watch的用法示例
Oct 04 #Javascript
Angularjs实现带查找筛选功能的select下拉框示例代码
Oct 04 #Javascript
用jquery快速解决IE输入框不能输入的问题
Oct 04 #Javascript
JavaScript九九乘法口诀表的简单实现
Oct 04 #Javascript
原生js仿jquery实现对Ajax的封装
Oct 04 #Javascript
You might like
PHP概述.
2006/10/09 PHP
基于PHP对XML的操作详解
2013/06/07 PHP
php简单随机字符串生成方法示例
2017/04/19 PHP
PHP判断是否是微信打开,浏览器打开的方法
2018/03/14 PHP
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
JS 有趣的eval优化输入验证实例代码
2013/09/22 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
vue制作加载更多功能的正确打开方式
2016/10/12 Javascript
Jquery Easyui搜索框组件SearchBox使用详解(19)
2016/12/17 Javascript
js时间戳与日期格式之间相互转换
2017/12/11 Javascript
vue+vuex+axios实现登录、注册页权限拦截
2018/03/09 Javascript
使用Angular CLI生成 Angular 5项目教程详解
2018/03/18 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
vue路由导航守卫和请求拦截以及基于node的token认证的方法
2019/04/07 Javascript
vue h5移动端禁止缩放代码
2019/10/28 Javascript
原生JavaScript实现滑动拖动验证的示例代码
2019/12/06 Javascript
JS中锚点链接点击平滑滚动并自由调整到顶部位置
2021/02/06 Javascript
Python正则表达式如何进行字符串替换实例
2016/12/28 Python
Python爬虫爬取一个网页上的图片地址实例代码
2018/01/16 Python
Python如何调用外部系统命令
2019/08/07 Python
Python3并发写文件与Python对比
2019/11/20 Python
编写函数,将一个3*3矩阵转置
2013/10/09 面试题
儿科护士自我鉴定
2013/10/14 职场文书
中医临床专业自我鉴定范文
2014/01/15 职场文书
学校节能减排倡议书
2014/05/16 职场文书
关于读书的演讲稿600字
2014/08/27 职场文书
2014县政府领导班子对照检查材料思想汇报
2014/09/25 职场文书
2014超市双十一活动策划方案
2014/09/29 职场文书
2015元旦标语横幅
2014/12/09 职场文书
安全事故隐患排查治理制度
2015/08/05 职场文书
2016国培研修心得体会
2016/01/08 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
Java中的继承、多态以及封装
2022/04/11 Java/Android
Tomcat项目启动失败的原因和解决办法
2022/04/20 Servers