首页
HTML+CSS
JavaScript
Vue
WordPress
WP Functions
注册/登录
首页 > JavaScript > 正文

JS:arguments对象

首先要说一下arguments:

ECMAScript中不介意传递进来的是什么参数,有多少个,更不在乎是什么数据类型的。为什么用这样那?原因就是ECMAScript的内部是用一个数组来表示的,函数体内可以通过一个叫arguments的对象来访问这个参数数组。Arguments是一个与数组类似的东西,在javascript中arguments是一个特殊的对象,不需要明确的指出参数的名字就可以访问;

Arguments对象还可以用来检测参数的个数,即:arguments.length。通过这个length属性你就能知道有多少个参数传递给了函数。

function a(){
    console.log(arguments.length);
}
a("参数1", "参数2");
a();
a("参数1", "参数2", "参数3");

所以说结果是:2, 0, 3 ;注意是输出每次调用函数的的参数个数。

function a(para1, para2)){
    console.log(arguments.length);
}
a("参数1", "参数2");
a();
a("参数1", "参数2", "参数3");

即使是原来的函数是有参数的那么也是2,0,3;

ECMAScript是不会去验证传递给函数的参数的个数是不是等于函数定义的参数个数,你可以传递任意个数的参数(网警之前文档里好像规定最多接受255个)任何遗漏的参数都会以undefined的形式表现出来的。

除了length,他还可以用方括号语法,就是arguments[i]的形式访问参数。

function a(para1, para2) {
    console.log(arguments.length);
    console.log((arguments[0]))
    console.log((arguments[1]))
    console.log((arguments[2]))
}
a();

结果是:

0,undefined,undefined,undefined

function a(para1,para2){
    console.log(arguments.length);
    console.log(arguments[0]);
    console.log(arguments[1]);
    console.log(arguments[2]);
}
a("参数","参数");
a();

结果是:2,参数,参数,undefined

有的人还会这样想,就是前面调用函数的时候赋值了,那么后面的是不是也影响了(没有这种想法请跳过),这个想法是错误的,两次调用毫无关系,这样想,你定义了一个函数就能用一次,一次性的,那这是啥代码啊。

不管如此,我们还可以用他来模拟函数的重载:

function add(){
    if(arguments.length==1){
        return arguments[0]
    }else if(arguments.length==2){
        return arguments[0]+arguments[1];
    }else{
        return '参数'
    }
}
console.log(add(1));
console.log(add(2,3));
console.log(add(3,4,5));

这个还是挺重要的,要知道ECMAScript不能像传统那样实现重载,在其中根本就没有函数签名,所以说真正的重载是不可能做到的,如果说像java那样定义两个名字相同的函数,因为我们参数没有类型,所以说就相当于被定义了两次,最后后面的会覆盖前面的。用arguments就可以模仿重载啦。

展开全部
分享到:

网友评论comments

发表评论

电子邮件地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 2012-2013 Weesh Net Media
扫二维码
扫二维码
返回顶部