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实现Flash炫光波动特效
May 14 Javascript
jQuery实现div横向拖拽排序的简单实例
Jul 13 Javascript
利用JS实现数字增长
Jul 28 Javascript
AngularJS入门教程之数据绑定用法示例
Nov 01 Javascript
JS实现直接运行html代码的方法
Mar 13 Javascript
js中获取键盘按下键值event.keyCode、event.charCode和event.which的兼容性详解
Mar 15 Javascript
纯JS实现图片验证码功能并兼容IE6-8(推荐)
Apr 19 Javascript
基于JS实现网页中的选项卡(两种方法)
Jun 16 Javascript
微信小程序scroll-view实现滚动穿透和阻止滚动的方法
Aug 20 Javascript
详解JavaScript 异步编程
Jul 13 Javascript
Threejs实现滴滴官网首页地球动画功能
Jul 13 Javascript
react中props 的使用及进行限制的方法
Apr 28 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实现验证码校验功能
2017/11/16 PHP
PHP通过GD库实现验证码功能示例
2019/02/23 PHP
Laravel5框架自定义错误页面配置操作示例
2019/04/17 PHP
基于JQuery的密码强度验证代码
2010/03/01 Javascript
javascript中substr,substring,slice.splice的区别说明
2010/11/25 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
jquery遍历json对象集合详解
2016/05/18 Javascript
jQuery基于toggle实现click触发DIV的显示与隐藏问题分析
2016/06/12 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
js实现贪吃蛇小游戏(容易理解)
2017/01/22 Javascript
自带气泡提示的vue校验插件(vue-verify-pop)
2017/04/07 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
详解基于 Nuxt 的 Vue.js 服务端渲染实践
2017/10/24 Javascript
Python地图绘制实操详解
2019/03/04 Python
详解Python循环作用域与闭包
2019/03/21 Python
python 自定义装饰器实例详解
2019/07/20 Python
python中有关时间日期格式转换问题
2019/12/25 Python
Python文件操作基础流程解析
2020/03/19 Python
Python sorted排序方法如何实现
2020/03/31 Python
python新手学习使用库
2020/06/11 Python
实例教程 纯CSS3打造非常炫的加载动画效果
2014/11/05 HTML / CSS
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
HTML5表格_动力节点Java学院整理
2017/07/11 HTML / CSS
iHerb俄罗斯:维生素、补品和天然产品
2020/07/09 全球购物
毕业生个人求职的自我评价
2013/10/28 职场文书
个人简历自我评价
2014/01/06 职场文书
小学新学期教师寄语
2014/01/18 职场文书
优秀家长事迹材料
2014/05/17 职场文书
司机工作自我鉴定
2014/09/19 职场文书
2014年禁毒工作总结
2014/11/24 职场文书
教师见习总结范文
2015/06/23 职场文书
房产遗嘱范本
2015/08/06 职场文书
利用Nginx代理如何解决前端跨域问题详析
2021/04/02 Servers
Redis缓存-序列化对象存储乱码问题的解决
2021/06/21 Redis
Java使用httpRequest+Jsoup爬取红蓝球号码
2021/07/02 Java/Android
Win11 BitLocker 驱动器加密
2022/04/19 数码科技