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重建星际争霸
Dec 22 Javascript
javascript css在IE和Firefox中区别分析
Feb 18 Javascript
js各种验证文本框输入格式(正则表达式)
Oct 22 Javascript
JS命名空间的另一种实现
Aug 09 Javascript
javascript生成随机数的方法
May 16 Javascript
js跨域问题浅析及解决方法优缺点对比
Nov 08 Javascript
javascript中sort() 方法使用详解
Aug 30 Javascript
BootStrap注意事项小结(五)表单
Mar 10 Javascript
Vue.js实战之Vuex的入门教程
Apr 01 Javascript
js实现前面自动补全位数的方法
Oct 10 Javascript
一文了解vue-router之hash模式和history模式
May 31 Javascript
解决vue使用vant下拉框van-dropdown-item 绑定title值不变问题
Aug 05 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
ThinkPHP3.1新特性之查询条件预处理简介
2014/06/19 PHP
全新Mac配置PHP开发环境教程
2016/02/03 PHP
php检查函数必传参数是否存在的实例详解
2017/08/28 PHP
jquery 打开窗口返回值实现代码
2010/03/04 Javascript
深入浅析JS的数组遍历方法(推荐)
2016/06/15 Javascript
jQuery中的insertBefore(),insertAfter(),after(),before()区别介绍
2016/09/01 Javascript
vue中使用ueditor富文本编辑器
2018/02/08 Javascript
在 Vue-CLI 中引入 simple-mock实现简易的 API Mock 接口数据模拟
2018/11/28 Javascript
微信小程序云开发之云函数详解
2019/05/16 Javascript
jquery实现下载图片功能
2019/07/18 jQuery
浅谈layui里的上传控件问题
2019/09/26 Javascript
vue3 源码解读之 time slicing的使用方法
2019/10/31 Javascript
vue实现在线预览pdf文件和下载(pdf.js)
2019/11/26 Javascript
python使用smtplib模块通过gmail实现邮件发送的方法
2015/05/08 Python
总结网络IO模型与select模型的Python实例讲解
2016/06/27 Python
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
python中从str中提取元素到list以及将list转换为str的方法
2018/06/26 Python
pandas 选择某几列的方法
2018/07/03 Python
Django后端发送小程序微信模板消息示例(服务通知)
2019/12/17 Python
python使用selenium爬虫知乎的方法示例
2020/10/28 Python
python的dict判断key是否存在的方法
2020/12/09 Python
CSS+jQuery实现的在线答题功能
2015/04/25 HTML / CSS
adidas澳大利亚官方网站:adidas Australia
2018/04/15 全球购物
2014年单位植树节活动方案
2014/03/23 职场文书
党校个人自我鉴定范文
2014/03/28 职场文书
2014年采购工作总结
2014/11/20 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
2014年党总支工作总结
2014/12/18 职场文书
学前班学生评语
2014/12/29 职场文书
贪污检举信范文
2015/03/02 职场文书
2015年学校精神文明工作总结
2015/05/27 职场文书
25句企业管理语录:助你迅速打开思路,句句经典!
2020/01/14 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js
Python中seaborn库之countplot的数据可视化使用
2021/06/11 Python
详细聊聊vue中组件的props属性
2021/11/02 Vue.js
Python爬取奶茶店数据分析哪家最好喝以及性价比
2022/09/23 Python