函数中的 arguments 对象
JavaScript函数具有像数组一样的对象,这些对象称为arguments,与传递给函数的参数相对应。传递给JavaScript函数的所有参数都可以使用arguments对象来引用。
现在我们开始学习,仔细看下面列出的代码:
function add(num1, num2) {
var res = num1 + num2;
return res;
}
var r = add(7, 8);
console.log(r);
在上面的函数中,num1和num2是两个参数。你可以使用名为num1和num2的arguments来引用这些参数。除了arguments名称之外,你还可以使用JavaScript数组,如对象arguments来引用它们。所以,上面的函数可以重写,如下所示:
function add(num1, num2) {
var res = arguments[0] + arguments[1];
return res;
}
var r = add(7, 8);
console.log(r);
在JavaScript函数中,arguments对象用于访问或引用传递给函数的所有参数。arguments对象是可用于函数的局部变量。arguments对象的长度相当于传递给函数的arguments数量。请看下面的代码,作为输出将得到2,因为有两个arguments传递给函数:
function add(num1, num2) {
var res = arguments.length;
return res;
}
var r = add(7, 8);
console.log(r);
arguments对象不是纯数组
JavaScript的arguments对象不是纯粹的JavaScript数组。你不能对arguments对象执行诸如push,pop,slice等操作。正如你将在下面列出的代码中所看到的那样,执行push操作会引发异常,因为arguments.push不是函数。
function add(num1, num2) {
arguments.push(78);
var res = num1 + num2;
return res;
}
可以设置arguments对象
你可以在arguments对象数组中设置特定的项。首先,你可以使用索引0设置数组的第一个项,如下所示:
function add(num1, num2) {
arguments[0] = 15;
var res = num1 + num2;
return res;
}
var r = add(7, 8);
console.log(r);
在add函数中,num1和arguments[0]引用相同的值。所以,当你更新arguments[0]时,num1的值也会被更新。对于上面的代码,输出将是23。
将arguments对象转换为数组
正如我们在这篇文章中介绍的那样,JavaScript函数arguments对象不是纯数组。除了长度属性外,它没有任何其他属性。但是,你可以使用Array.prototype.slice.call将arguments对象转换为数组,如下所示:
function add(num1, num2) {
var arg = Array.prototype.slice.call(arguments);
console.log(arg.pop());
}
在ECMAScript 6中,你可以将arguments对象转换为一个数组,如下所示:
function add(num1, num2) {
var arg = Array.from(arguments);
console.log(arg.pop());
}
结论
总而言之,关于arguments对象需要谨记的一些重要事情有:
arguments对象的长度等于传递给函数的参数的数量。
arguments对象是类似数组的对象,但不是JavaScript数组。
你不能对arguments对象使用其他JavaScript数组方法,例如push,pop,slice等等。
JavaScript arguments对象索引从零开始。所以第一个参数将被arguments[0]引用,第二个参数将被arguments[1]引用,等等。
简单地说,JavaScript arguments对象是一个类似数组的对象,它引用传递给函数的参数。在ECMAScript 6中,引入的rest参数现已被广泛用来替代函数中的arguments对象用于变量数或参数。
函数中的 arguments 对象的更多相关文章
- JavaScript函数中的arguments对象
ECMAScript标准中,每个函数都有一个特殊的内置对象arguments.arguments对象是一个类Array对象(object),用以保存函数接收到的实参副本. 一.内置特性 说它是一个内置 ...
- js理论-函数中的Arguments对象
详情参考:https://github.com/mqyqingfeng/Blog/issues/14 如果: arguments和实参的关系,以及arguments的属性 附上代码和注解 functi ...
- 你知道 JavaScript 中的 Arguments 对象都有哪些用途吗?
JavaScript 中 Arguments 对象的用途总结. 前言 相信我们很多人在代码开发的过程中都使用到过一个特殊的对象 -- Arguments 对象. 在实际开发中,Arguments 对象 ...
- javascript中的arguments对象
在js中一切都是对象,连函数也是对象,函数名其实是引用函数定义对象的变量. 1.什么是arguments? 这个函数体内的arguments非常特殊,实际上是所在函数的一个内置类数组对象,可以用数组的 ...
- 理解Javascript参数中的arguments对象
ECMAScript中函数没有标签名的特性,所以ECMAScript函数中没有重载. Javascript中arguments的存在可以弥补javascript中函数没有重载的不足. Javascri ...
- JavaScript基础精华02(函数声明,arguments对象,匿名函数,JS面向对象基础)
函数声明 JavaScript中声明函数的方式:(无需声明返回值类型) function add(i1, i2) { return i1 + i2;//如果不写return返回 ...
- jacascript 函数参数与 arguments 对象
前言:这是笔者学习之后自己的理解与整理.如果有错误或者疑问的地方,请大家指正,我会持续更新! 调用函数时,实参和形参需要一一对应,但如果参数多了的话,会很苦恼: 我们可以用键值对(字面量对象)的方式传 ...
- js中的arguments对象
在Javascript中没有函数重载,而arguments对象弥补了这点不足. js函数的参数是一个数组,在参数个数不固定的情况下,只需要给方法传递不同元素个数的数组即可.即使声明函数时没有形式参数, ...
- JavaScript中通过arguments对象实现对象的重载
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
随机推荐
- ubuntu sudoers改坏了。
pkexec bash 通过如上命令,可以进入root模式,然后恢复sudoers.前提是root账户没被禁用. precise (1) pkexec.1.gz Provided by: policy ...
- Entity Framework 5.0 Code First全面学习 (转)
原文地址:感谢原文作者 http://blog.csdn.net/gentle_wolf/article/details/14004345 不贴图片了,太累. Code First 约定 借助 Cod ...
- hive中行转换成列以及hive相关知识
Hive语句: Join应该把大表放到最后 左连接时,左表中出现的JOIN字段都保留,右表没有连接上的都为空.对于带WHERE条件的JOIN语句,例如: 1 SELECT a.val, b.val F ...
- 最全Pycharm教程(26)——Pycharm搜索导航之文件名、符号名搜索(转)
1.准备一个工程 向你的工程中添加一个Python文件,并输入一些源码,例如: 2.转到对应文件.类.符号 Pycharm提供的一个很强力的功能就是能够根据名称跳转到任何文件.类.符号所在定义位置. ...
- Linux文档时间戳查看和修改——stat
查看文件时间戳命令:stat awk.txtFile: `awk.txt'Size: 20 Blocks: 8 IO Block: 4096 regular fileDevice: 801h/2 ...
- linux 端口设置结构体 struc
目录(?)[-] 一 输入模式 三输出模式 四控制模式 六特殊的控制字符 字符 TIME和MIN值 通过shell访问终端模式 终端速度 其他函数 使用termios结构的密码程序 termi ...
- 企业级-Mysql双主互备高可用负载均衡架构(基于GTID主从复制模式)(原创)
前言: 原理与思想 这里选用GTID主从复制模式Mysql主从复制模式,是为了更加确保主从复制的正确性.健康性与易配性.这里做的是两服务器A,B各有Mysql实例331 ...
- DB2和Oracle中Date比较
- normalize.css阅读笔记
最近在被各种浏览器的CSS兼容折磨,所以看了看normalize的源代码来了解一些常见的浏览器间不一致的CSS渲染问题…… 源代码在这里 text-size-adjust 用法参见Apple的文档和M ...
- s12-day04-work01 简单计算器功能实现
代码: #!/usr/local/env python3 ''' Author:@南非波波 Blog:http://www.cnblogs.com/songqingbo/ E-mail:qingbo. ...