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 控制下拉菜单刷新的方法
Mar 03 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
Apr 19 Javascript
js 3种归并操作的实例代码
Oct 30 Javascript
JQuery操作textarea,input,select,checkbox方法
Sep 02 Javascript
JS中innerHTML和pasteHTML的区别实例分析
Jun 22 Javascript
原生JS改变透明度实现轮播效果
Mar 24 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
Oct 09 Javascript
JS动态添加元素及绑定事件造成程序重复执行解决
Dec 07 Javascript
详解JS数值Number类型
Feb 07 Javascript
解决Vue打包之后文件路径出错的问题
Mar 06 Javascript
JavaScript实现模态对话框实例
Jan 13 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
Aug 03 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提取数据库内容中的图片地址并循环输出
2010/03/21 PHP
php echo 输出字符串函数详解
2010/05/13 PHP
微信支付开发教程(一)微信支付URL配置
2014/05/28 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
在线编辑器的实现原理(兼容IE和FireFox)
2007/03/09 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
jquery.form.js用法之清空form的方法
2014/03/07 Javascript
JavaScript如何调试有哪些建议和技巧附五款有用的调试工具
2015/10/28 Javascript
jquery日历插件datepicker用法分析
2016/01/22 Javascript
基于JS如何实现给字符加千分符(65,541,694,158)
2016/08/03 Javascript
基于Javascript倒计时效果
2016/12/22 Javascript
jQuery EasyUI Panel面板组件使用详解
2017/02/28 Javascript
AngularJS中下拉框的基本用法示例
2017/10/11 Javascript
详解js静态检查工具eslint配置文件
2018/11/23 Javascript
Vue指令指令大全
2019/02/09 Javascript
vue请求本地自己编写的json文件的方法
2019/04/25 Javascript
HTML+JavaScript实现扫雷小游戏
2019/09/30 Javascript
详细解析Python当中的数据类型和变量
2015/04/25 Python
Python正则捕获操作示例
2017/08/19 Python
Python中turtle作图示例
2017/11/15 Python
python实现多线程网页下载器
2018/04/15 Python
Python如何爬取实时变化的WebSocket数据的方法
2019/03/09 Python
Python利用lxml模块爬取豆瓣读书排行榜的方法与分析
2019/04/15 Python
详解Python3之数据指纹MD5校验与对比
2019/06/11 Python
Django中使用极验Geetest滑动验证码过程解析
2019/07/31 Python
pygame实现俄罗斯方块游戏(AI篇2)
2019/10/29 Python
Python图片的横坐标汉字实例
2019/12/04 Python
Django serializer优化类视图的实现示例
2020/07/16 Python
如何用 Python 制作 GitHub 消息助手
2021/02/20 Python
违反学校规定检讨书
2014/01/18 职场文书
公司授权委托书范文
2014/08/02 职场文书
求职意向书范本
2015/05/11 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
关于考试抄袭的检讨书
2019/11/02 职场文书
Spring Bean是如何初始化的详解
2022/03/22 Java/Android