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闭包入门示例
Apr 30 Javascript
jQuery的animate函数学习记录
Aug 08 Javascript
js实现文本框宽度自适应文本宽度的方法
Aug 13 Javascript
HTML5游戏引擎LTweenLite实现的超帅动画效果(附demo源码下载)
Jan 26 Javascript
完美实现八种js焦点轮播图(下篇)
Apr 20 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
Oct 27 Javascript
利用VUE框架,实现列表分页功能示例代码
Jan 12 Javascript
jQuery ajax动态生成table功能示例
Jun 14 jQuery
vue父组件通过props如何向子组件传递方法详解
Aug 16 Javascript
vue弹窗插件实战代码
Sep 08 Javascript
详解webpack loader和plugin编写
Oct 12 Javascript
Vue学习之axios的使用方法实例分析
Jan 06 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程序
2012/02/04 PHP
jquery.post用法示例代码
2014/01/03 Javascript
JS解决iframe之间通信和自适应高度的问题
2016/08/24 Javascript
jquery控制页面的展开和隐藏实现方法(推荐)
2016/10/15 Javascript
javascript回调函数详解
2018/02/06 Javascript
如何把vuejs打包出来的文件整合到springboot里
2018/07/26 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
小程序自定义日历效果
2018/12/29 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
axios封装,使用拦截器统一处理接口,超详细的教程(推荐)
2019/05/02 Javascript
JavaScript中callee和caller的区别与用法实例分析
2019/06/28 Javascript
判断“命令按钮”是否被鼠标单击详解
2019/07/31 Javascript
关于layui表单中按钮自动提交的解决方法
2019/09/09 Javascript
Vue 微信端扫描二维码苹果端却只能保存图片问题(解决方法)
2020/01/19 Javascript
[02:08:58]2014 DOTA2国际邀请赛中国区预选赛 Ne VS CIS
2014/05/22 DOTA
python中的sort方法使用详解
2014/07/25 Python
Python文档生成工具pydoc使用介绍
2015/06/02 Python
Python中基础的socket编程实战攻略
2016/06/01 Python
Python操作RabbitMQ服务器实现消息队列的路由功能
2016/06/29 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
Flask解决跨域的问题示例代码
2018/02/12 Python
Python3.6使用tesseract-ocr的正确方法
2018/10/17 Python
python使用Qt界面以及逻辑实现方法
2019/07/10 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
python生成requirements.txt的两种方法
2019/09/18 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
python中的插入排序的简单用法
2021/01/19 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
DNA测试:Orig3n
2019/03/01 全球购物
一套C++笔试题面试题
2012/06/06 面试题
五月的鲜花活动方案
2014/08/21 职场文书
2014国庆节主题活动方案:快乐的国庆节
2014/09/16 职场文书
房屋买卖定金协议书
2016/03/21 职场文书
坚持不是死撑,更重要的是心态
2019/08/19 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript