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(jquery)利用函数修改全局变量的代码
Nov 02 Javascript
JavaScript高级程序设计(第3版)学习笔记4 js运算符和操作符
Oct 11 Javascript
在JavaScript并非所有的一切都是对象
Apr 11 Javascript
JavaScript中的常见问题解决方法(乱码,IE缓存,代理)
Nov 28 Javascript
js创建对象的区别示例介绍
Jul 24 Javascript
谈谈JavaScript自定义回调函数
Oct 18 Javascript
bootstrap中使用google prettify让代码高亮的方法
Oct 21 Javascript
使用ionic播放轮询广告的实现方法(必看)
Apr 24 Javascript
vue mint-ui 实现省市区街道4级联动示例(仿淘宝京东收货地址4级联动)
Oct 16 Javascript
JS匿名函数和匿名自执行函数概念与用法分析
Mar 16 Javascript
JavaScript使用indexOf()实现数组去重的方法分析
Sep 04 Javascript
React实现动效弹窗组件
Jun 21 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之数组学习
2011/05/29 PHP
基于php验证码函数的使用示例
2013/05/03 PHP
php中怎么搜索相关联数组键值及获取之
2013/10/17 PHP
PHP面向对象程序设计方法实例详解
2016/12/24 PHP
laravel-admin的图片删除实例
2019/09/30 PHP
JS代码格式化和语法着色V2
2006/10/14 Javascript
小型js框架veryide.librar源代码
2009/03/05 Javascript
Domino中运用jQuery读取视图内容的方法
2009/10/21 Javascript
地址栏传递中文参数乱码在js里用escape转码
2013/08/28 Javascript
jquery实现input输入框实时输入触发事件代码
2014/01/28 Javascript
jquery实现手机发送验证码的倒计时代码
2014/02/12 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
每天一篇javascript学习小结(基础知识)
2015/11/10 Javascript
JavaScript仿聊天室聊天记录
2016/12/27 Javascript
vue中当图片地址无效的时候,显示默认图片的方法
2018/09/18 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
vue使用video.js进行视频播放功能
2019/07/18 Javascript
layui自定义插件citySelect实现省市区三级联动选择
2019/07/26 Javascript
js实现图片粘贴到网页
2019/12/06 Javascript
JS数组方法join()用法实例分析
2020/01/18 Javascript
python实现批量修改文件名代码
2017/09/10 Python
Python 用Redis简单实现分布式爬虫的方法
2017/11/23 Python
Python数据预处理之数据规范化(归一化)示例
2019/01/08 Python
详解pandas安装若干异常及解决方案总结
2019/01/10 Python
python十进制转二进制的详解
2020/02/07 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
热能动力工程毕业生自荐信
2013/11/07 职场文书
家长通知书家长评语
2014/04/17 职场文书
《秋游》教学反思
2014/04/24 职场文书
学术会议领导致辞
2015/07/29 职场文书
标会主持词应该怎么写?
2019/08/15 职场文书
修辞手法有哪些?
2019/08/29 职场文书
掌握这项技巧,一年阅读300本书不是梦
2019/09/12 职场文书
tensorflow中的梯度求解及梯度裁剪操作
2021/05/26 Python
python opencv将多个图放在一个窗口的实例详解
2022/02/28 Python
Nebula Graph解决风控业务实践
2022/03/31 MySQL