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 相关文章推荐
seajs1.3.0源码解析之module依赖有序加载
Nov 07 Javascript
什么是MEAN?JavaScript编程中的MEAN是什么意思?
Dec 18 Javascript
javascript面向对象之访问对象属性的两种方式分析
Jan 13 Javascript
JavaScript定义数组的三种方法(new Array(),new Array('x','y')
Oct 04 Javascript
JavaScript之Vue.js【入门基础】
Dec 06 Javascript
BootStrap实现鼠标悬停下拉列表功能
Feb 17 Javascript
教你5分钟学会用requirejs(必看篇)
Jul 25 Javascript
Vue+webpack项目基础配置教程
Feb 12 Javascript
JS实现对json对象排序并删除id相同项功能示例
Apr 18 Javascript
Vue render函数实战之实现tabs选项卡组件
Apr 22 Javascript
JS document form表单元素操作完整示例
Jan 13 Javascript
详解Vue3 Teleport 的实践及原理
Dec 02 Vue.js
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
三国漫画《火凤燎原》宣布动画化PV放出 预计2020年播出
2020/03/08 国漫
php mssql 数据库分页SQL语句
2008/12/16 PHP
php jquery 多文件上传简单实例
2013/12/23 PHP
linux中cd命令使用详解
2015/01/08 PHP
PHP面向对象详解(三)
2015/12/07 PHP
[原创]js获取数组任意个不重复的随机数组元素
2010/03/15 Javascript
IE下js调试工具Companion.JS
2010/10/15 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
Bootstrap Table从服务器加载数据进行显示的实现方法
2016/09/29 Javascript
web前端开发upload上传头像js示例代码
2016/10/22 Javascript
将鼠标焦点定位到文本框最后(代码分享)
2017/01/11 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
微信小程序文章详情页面实现代码
2018/09/10 Javascript
node实现socket链接与GPRS进行通信的方法
2019/05/20 Javascript
jQuery属性选择器用法实例分析
2019/06/28 jQuery
layui table动态表头 改变表格头部 重新加载表格的方法
2019/09/21 Javascript
vue多页面项目中路由使用history模式的方法
2019/09/23 Javascript
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
js实现点击选项置顶动画效果
2020/08/25 Javascript
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
在Python的web框架中编写创建日志的程序的教程
2015/04/30 Python
利用Python循环(包括while&amp;for)各种打印九九乘法表的实例
2017/11/06 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
python3操作微信itchat实现发送图片
2018/02/24 Python
Python实现监控键盘鼠标操作示例【基于pyHook与pythoncom模块】
2018/09/04 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
如何使用repr调试python程序
2020/02/28 Python
Python列表去重复项的N种方法(实例代码)
2020/05/12 Python
如何用css3实现switch组件开关的方法
2018/02/09 HTML / CSS
经典C++面试题一
2016/11/06 面试题
社团文化节邀请函
2014/01/10 职场文书
中学生2014国庆节演讲稿:不屈的民族
2014/09/21 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
试用期辞职信范文
2015/03/02 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
详解Spring Security如何在权限中使用通配符
2022/06/28 Java/Android