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测试显示屏分辨率以及屏幕尺寸的方法
Nov 22 Javascript
用Move.js配合创建CSS3动画的入门指引
Jul 22 Javascript
JavaScript DOM 学习总结(五)
Nov 24 Javascript
[原创]Javascript 实现广告后加载 可加载百度谷歌联盟广告
May 11 Javascript
AngularJS表单和输入验证实例
Nov 02 Javascript
JS解决移动web开发手机输入框弹出的问题
Mar 31 Javascript
Node.js调用fs.renameSync报错(Error: EXDEV, cross-device link not permitted)
Dec 27 Javascript
微信小程序button组件使用详解
Jan 31 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
May 16 Javascript
详解如何使用router-link对象方式传递参数?
May 02 Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 Javascript
JavaScript实现贪吃蛇游戏
Jun 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
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
php中addslashes函数与sql防注入
2014/11/17 PHP
百度地图API使用方法详解
2015/08/25 PHP
日常整理PHP中简单的图形处理(经典)
2015/10/26 PHP
Yii2实现log输出到file及database的方法
2016/11/12 PHP
laravel框架使用阿里云短信发送消息操作示例
2020/02/15 PHP
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
jquery实现智能感知连接外网搜索
2013/05/21 Javascript
判断是否安装flash player及当前版本的JS代码
2013/08/08 Javascript
jQuery扁平化风格下拉框美化插件FancySelect使用指南
2015/02/10 Javascript
浅谈javascript中的instanceof和typeof
2015/02/27 Javascript
arcgis for js 修改infowindow样式的方法
2016/11/02 Javascript
JS实现的适合做faq或menu滑动效果示例
2016/11/17 Javascript
微信小程序 摇一摇抽奖简单实例实现代码
2017/01/09 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
Angular2 父子组件数据通信实例
2017/06/22 Javascript
微信小程序 页面跳转事件绑定的实例详解
2017/09/20 Javascript
JavaScript使用小插件实现倒计时的方法讲解
2019/03/11 Javascript
VUE注册全局组件和局部组件过程解析
2019/10/10 Javascript
Python文件与文件夹常见基本操作总结
2016/09/19 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
django框架使用方法详解
2019/07/18 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
python自动化测试三部曲之request+django实现接口测试
2020/10/07 Python
CSS3 animation实现逐帧动画效果
2016/06/02 HTML / CSS
鲜为人知的HTML5语音合成功能
2019/05/17 HTML / CSS
毕业研究生的自我鉴定
2013/11/30 职场文书
数学系毕业生的自我评价
2014/01/10 职场文书
小学毕业典礼主持词
2014/03/27 职场文书
明信片寄语大全
2014/04/08 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
MySQL数据库10秒内插入百万条数据的实现
2021/11/01 MySQL
Nginx stream 配置代理(Nginx TCP/UDP 负载均衡)
2021/11/17 Servers
关于PHP数组迭代器的使用方法实例
2021/11/17 PHP
讨论nginx location 顺序问题
2022/05/30 Servers