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静态方法与实例方法分析
Jul 04 Javascript
JavaScript中函数声明优先于变量声明的实例分析
Mar 01 Javascript
Javascript获取HTML静态页面参数传递值示例
Aug 18 Javascript
jquery中的on方法使用介绍
Dec 29 Javascript
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
非常棒的jQuery图片轮播效果
Apr 17 Javascript
JS中解决谷歌浏览器记住密码输入框颜色改变功能
Feb 13 Javascript
js实现每日签到功能
Nov 29 Javascript
jQuery表单选择器用法详解
Aug 22 jQuery
Vue如何基于vue-i18n实现多国语言兼容
Jul 17 Javascript
在Vuex中Mutations修改状态操作
Jul 24 Javascript
详解如何解决使用JSON.stringify时遇到的循环引用问题
Mar 23 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数组的交集array_intersect(),array_intersect_assoc(),array_inter_key()函数的小问题
2011/05/29 PHP
yii 2.0中表单小部件的使用方法示例
2017/05/23 PHP
js 日期转换成中文格式的函数
2009/07/07 Javascript
基于jquery扩展漂亮的CheckBox(自己编写)
2013/11/19 Javascript
location.href用法总结(最主要的)
2013/12/27 Javascript
借助JavaScript脚本判断浏览器Flash Player信息的方法
2014/07/09 Javascript
基于javascript实现仿百度输入框自动匹配功能
2016/01/03 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
React Native 搭建开发环境的方法步骤
2017/10/30 Javascript
vue自动化表单实例分析
2018/05/06 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
Vue.js结合bootstrap前端实现分页和排序效果
2018/12/29 Javascript
详解vue3.0 diff算法的使用(超详细)
2020/07/01 Javascript
vue.js+element 默认提示中英文操作
2020/11/11 Javascript
[02:14]2016国际邀请赛中国区预选赛Ehome晋级之路
2016/07/01 DOTA
python 运算符 供重载参考
2009/06/11 Python
python之yield表达式学习
2014/09/02 Python
python实现封装得到virustotal扫描结果
2014/10/05 Python
Django admin实现图书管理系统菜鸟级教程完整实例
2017/12/12 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
Django使用 Bootstrap 样式修改书籍列表过程解析
2019/08/09 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
goodhealth官方海外旗舰店:新西兰国民营养师
2017/12/15 全球购物
伦敦鲜花递送:Flower Station
2021/02/03 全球购物
营业员演讲稿
2013/12/30 职场文书
小学语文国培感言
2014/03/04 职场文书
婚礼主持词开场白
2014/03/13 职场文书
《红军不怕远征难》教学反思
2014/04/14 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
2015年公务员转正工作总结
2015/04/24 职场文书
员工工作表扬信
2015/05/05 职场文书
《云雀的心愿》教学反思
2016/02/23 职场文书
Java实现带图形界面的聊天程序
2022/06/10 Java/Android
element tree树形组件回显数据问题解决
2022/08/14 Javascript