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 相关文章推荐
封装了一个js图片轮换效果的函数
Sep 28 Javascript
我的Node.js学习之路(三)--node.js作用、回调、同步和异步代码 以及事件循环
Jul 06 Javascript
jQuery实现文本展开收缩特效
Jun 03 Javascript
Bootstrap每天必学之媒体对象
Nov 30 Javascript
Angular的Bootstrap(引导)和Compiler(编译)机制
Jun 20 Javascript
js实现获取鼠标当前的位置
Dec 14 Javascript
vue+vuex+axio从后台获取数据存入vuex实现组件之间共享数据
Apr 22 Javascript
深入理解ES7的async/await的用法
Sep 09 Javascript
JS使用JSON.parse(),JSON.stringify()实现对对象的深拷贝功能分析
Mar 06 Javascript
JointJS JavaScript流程图绘制框架解析
Aug 15 Javascript
JavaScript文档对象模型DOM
Nov 20 Javascript
JS setTimeout与setInterval的区别
Apr 20 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 会话(session 时间设定)使用入门代码
2008/06/05 PHP
分享3个php获取日历的函数
2015/09/25 PHP
LBS blog sql注射漏洞[All version]-官方已有补丁
2007/08/26 Javascript
Script的加载方法小结
2011/01/12 Javascript
基于jquery的无缝循环新闻列表插件
2011/03/07 Javascript
JavaScript原生对象之String对象的属性和方法详解
2015/03/13 Javascript
jquery+ajax请求且带返回值的代码
2015/08/12 Javascript
JS实现不规则TAB选项卡效果代码
2015/09/16 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
JS实现给对象动态添加属性的方法
2017/01/05 Javascript
jquery 实现复选框的全选操作实例代码
2017/01/24 Javascript
Javascript中的async awai的用法
2017/05/17 Javascript
BootStrap Table 后台数据绑定、特殊列处理、排序功能
2017/05/27 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
2018/01/27 Javascript
angular2中使用第三方js库的实例
2018/02/26 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
微信小程序iBeacon测距及稳定程序的实现解析
2019/07/31 Javascript
python交互式图形编程实例(二)
2017/11/17 Python
Python读取Json字典写入Excel表格的方法
2018/01/03 Python
浅谈python之新式类
2018/08/12 Python
Python实现查找最小的k个数示例【两种解法】
2019/01/08 Python
Python Django 添加首页尾页上一页下一页代码实例
2019/08/21 Python
基于python的BP神经网络及异或实现过程解析
2019/09/30 Python
Pycharm编辑器功能之代码折叠效果的实现代码
2020/10/15 Python
使用phonegap获取设备的一些信息方法
2017/03/31 HTML / CSS
李维斯法国官网:Levi’s法国
2019/07/13 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
英国豪华家具和家居用品购物网站:Teddy Beau
2020/10/12 全球购物
程序员求职信
2014/04/16 职场文书
禁毒宣传工作方案
2014/05/23 职场文书
全运会口号
2014/06/20 职场文书
党课培训心得体会
2014/09/02 职场文书
乡镇党委书记个人整改措施
2014/09/15 职场文书
教师党员群众路线教育实践活动心得体会
2014/11/04 职场文书
亲属关系公证书样本
2015/01/23 职场文书
MySQL 使用自定义变量进行查询优化
2021/05/14 MySQL