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 相关文章推荐
Jquery插件 easyUI属性汇总
Jan 19 Javascript
Javascript中的isNaN函数使用说明
Nov 10 Javascript
js禁止页面使用右键(简单示例代码)
Nov 13 Javascript
js父窗口关闭时子窗口随之关闭完美解决方案
Apr 29 Javascript
jQuery实现点击水纹波动动画
Apr 10 Javascript
基于JavaScript实现购物车功能
Feb 07 Javascript
详解Vue + Vuex 如何使用 vm.$nextTick
Nov 20 Javascript
vue-cli 使用vue-bus来全局控制的实例讲解
Sep 15 Javascript
vue解决弹出蒙层滑动穿透问题的方法
Sep 22 Javascript
微信小程序如何实现radio单选框单击打勾和取消
Jan 21 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
Jul 15 Javascript
vue实现div可拖动位置也可改变盒子大小的原理
Sep 16 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
mysql_num_rows VS COUNT 效率问题分析
2011/04/23 PHP
请离开include_once和require_once
2013/07/18 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
php实现比较两个字符串日期大小的方法
2015/05/12 PHP
Yii2 GridView实现列表页直接修改数据的方法
2016/05/16 PHP
微信支付开发告警通知实例
2016/07/12 PHP
php事件驱动化设计详解
2016/11/10 PHP
PHP实现的微信APP支付功能示例【基于TP5框架】
2019/09/16 PHP
一端时间轮换的广告
2006/06/26 Javascript
javascript arguments 传递给函数的隐含参数
2009/08/21 Javascript
JS中eval函数的使用示例
2013/07/21 Javascript
Jquery通过Ajax访问XML数据的小例子
2013/11/18 Javascript
jquery中checkbox使用方法简单实例演示
2015/11/24 Javascript
jquery ajax双击div可直接修改div中的内容
2016/03/04 Javascript
JavaScript高级程序设计(第三版)学习笔记6、7章
2016/03/11 Javascript
jQuery与js实现颜色渐变的方法
2016/12/30 Javascript
详解key在Vue列表渲染时究竟起到了什么作用
2019/04/20 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
2019/06/18 Javascript
JavaScript获取页面元素的常用方法详解
2019/09/28 Javascript
vue-devtools的安装和使用步骤详解
2019/10/17 Javascript
[05:40]DOTA2荣耀之路6:Wings最后进攻
2018/05/30 DOTA
[49:59]KG vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
[04:29]【TI9采访】OG.N0tail在胜者组决赛后接受采访
2019/08/25 DOTA
Python实现二叉树结构与进行二叉树遍历的方法详解
2016/05/24 Python
django 解决manage.py migrate无效的问题
2018/05/27 Python
详解PANDAS 数据合并与重塑(join/merge篇)
2019/07/09 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
使用Python内置模块与函数进行不同进制的数的转换
2020/04/26 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
联想墨西哥官方网站:Lenovo墨西哥
2016/08/17 全球购物
自我评价是什么
2014/01/04 职场文书
2014年大学生自我评价
2014/01/19 职场文书
休假证明书
2015/06/24 职场文书
阳光体育运动标语口号
2015/12/26 职场文书
《唯一的听众》教学反思
2016/02/18 职场文书