javascript arguments对象怎么用


本文摘自PHP中文网,作者青灯夜游,侵删。

javascript arguments对象的用法:1、获取实参和形参的个数;2、修改实参值;3、改变实参的个数;4、检测用户传递的参数是否符合要求;5、函数的参数个数不确定时,用于访问调用函数的实参值;6、遍历或访问实参的值。

本教程操作环境:windows7系统、javascript1.8.5版、Dell G3电脑。

arguments 对象表示函数的实参集合,仅能够在函数体内可见,并可以直接访问。

arguments 对象的 length 属性和 callee 属性最为常用:

  • 使用 length 属性可以获取函数的实参个数。arguments 对象只能在函数体内可见,因此 arguments.length 也只能在函数体内使用。

  • 使用 callee 属性可以引用当前 arguments 对象所在的函数。使用 callee 属性可以在函数体内调用函数自身。在匿名函数中,callee 属性比较有用。例如,利用它可以设计递归调用。

示例1:获取实参和形参的个数

使用 arguments.length 属性可以获取函数的实参个数。使用函数对象的 length 属性可以获取函数的形参个数,该属性为只读属性,在函数体内、体外都可以使用。

下面示例设计一个 checkArg() 函数,用来检测一个函数的形参和实参是否一致,如果不一致则抛出异常。

1

2

3

4

5

6

7

8

9

function checkArg(a) {  //检测函数实参与形参是否一致

    if (a.length != a.callee.length)  //如果实参与形参个数不同,则抛出错误

    throw new Error("实参和形参不一致");

}

function f(a, b) {  //求两个数的平均值

    checkArg(arguments);   //根据arguments来检测函数实参和形参是否一致

    return ((a * 1 ? a : 0) + (b * 1 ? b : 0)) / 2;  //返回平均值

}

console.log(f(6));  //抛出异常。调用函数f,传入一个参数

示例2:在函数内部修改实参的值

在下面示例中使用 for 循环遍历 arguments 对象,然后把循环变量的值传入 arguments,以便于改变实参值。

1

2

3

4

5

6

7

function f() {

    for (var i = 0; i < arguments.length; i++) {  //遍历arguments对象

        arguments[i] = i;  //修改每个实参的值

        console.log(arguments[i]);  //提示修改的实参值

    }

}

f(3, 3, 6);  //返回提示0、1、2,而不是3、3、6

示例3:改变函数实参的个数

通过修改 length 属性值,也可以改变函数的实参个数。当 length 属性值增大时,则增加的实参值为 undefined;如果 length 属性值减小,则会丢弃 length 长度值之后的实参值。

1

2

3

4

5

6

7

function f() {

    arguments.length = 2;  //修改arguments属性对象的length属性值

    for (var i = 0; i < arguments.length; i ++) {

        console.log(arguments[i]);

    }

}

f(3, 3, 6);  //返回提示3、3

示例4:检测用户传递的参数是否符合要求

在下面示例中,使用 arguments.callee 获取匿名函数,然后通过函数的 length 属性获取函数形参个数,最后比较实参个数与形参个数,以检测用户传递的参数是否符合要求。

1

2

3

4

5

6

7

8

9

10

function f(x,y,z) {

    var a = arguments.length();  //获取函数实参的个数

    var b = arguments.callee.length;  //获取函数形参的个数

    if (a != b_ {  //如果实参和形参个数不相等,则提示错误信息

        throw new Error("传递的参数不匹配");

    }else //如果实参和形参个数相同,则返回它们的和

        return x + y + z;

    }

}

console.log(f(3,4,5));  //返回值12

arguments.callee 等价于函数名,在上面示例中,arguments.callee 等于 f。

arguments 对象的应用

在实际开发中,arguments 对象非常有用。灵活使用 arguments 对象,可以提升使用函数的灵活性,增强函数在抽象编程中的适应能力和纠错能力。下面结合几个典型示例展示 arguments 的应用。

1) 使用 arguments 对象能够增强函数应用的灵活性。例如,如果函数的参数个数不确定,或者函数的参数个数很多,而又不想逐一定义每一个形参,则可以省略定义参数,直接在函数体内使用 arguments 对象来访问调用函数的实参值。

示例1

下面示例定义一个求平均值的函数,该函数借助 arguments 对象来计算参数的平均值。在调用函数时,可以传入任意多个参数。

1

2

3

4

5

6

7

8

9

10

11

12

13

function avg() {  //求平均值

    var num = 0, 1 = 0;  //声明并初始化临时变量

    for (var i = 0; i < arguments.length; i ++) {  //遍历所有实参

        if (typeof arguments[i] != "number"//如果参数不是数值

            continue//则忽略该参数值

        num += arguments[i];  //计算参数的数值之和

            1 ++;  //计算参与和运算的参数个数

    }   

    num /= 1;  //求平均值

    return num;  //返回平均值

}

console.log(avg(1,2,3,4));  //返回2.5

console.log(avg(1,2,"3",4));  //返回2.3333333333333335

示例2

在页面设计中经常需要验证表单输入值,下面示例检测文本框输入的值是否为合法的邮箱地址。

1

2

3

4

5

6

7

8

9

10

function isEmail() {

    if (arguments.length > 1) throw new Error("只能够传递一个参数");  //检测参数个数

    var regexp = /^\w+((-\w+) | (\.\w+)) *\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)8\.[A-Za-z0-9]+$/;  //定义正则表达式

    if (arguments[0].search(regexp) != -1)  //匹配实参的值

        return true//如果匹配则返回true

    else

        return false//如果不匹配则返回false

}

var email = "1798017447@qq.com"//声明并初始化邮箱地址字符串

console.log(isEmail(email));  //返回true

2) arguments 对象是伪类数组,不是数组,可以通过 length 属性和中括号语法来遍历或访问实参的值。不过,通过动态调用的方法,也可以使用数组的方法,如 push、pop、slice 等。

示例3

使用 arguments 可以模拟重载。实现方法:通过 arguments.length 属性值判断实际参数的个数和类型,决定执行不同的代码。

1

2

3

4

5

6

7

8

9

10

11

12

13

function sayHello() {

    switch(arguments.length) {

        case 0 :

            return "Hello";

        case 1 :

            return "Hello, " + arguments[0];

        case 2 :

            return (arguments[1] == "cn" ? "你好, " : "Hello, ") + arguments[0];

    };

}

console.log(sayHello());  //"Hello"

console.log(sayHello("Alex"));  //"Hello,Alex"

console.log(sayHello("Alex", "vn"));  //"你好,Alex"

示例4

下面示例使用动态调用的方法,让 arguments 对象调用数组方法 slice(),可以把函数的参数对象转换为数组。

1

2

3

4

function f() {

    return [].slice.apply(arguments);

}

console.log(f(1,2,3,4,5,6));  //返回[1,2,3,4,5,6]

【推荐学习:javascript高级教程

以上就是javascript arguments对象怎么用的详细内容,更多文章请关注木庄网络博客

相关阅读 >>

你需要知道的关于javascript计时器的所有内容

介绍js的四种类型检测方法及根据jquery写的工具方法

360如何打开javascript

javascript是干啥的

javascript字符串转换为日期的方法

通过代码实例,带你了解v-model(值得收藏)!

js中怎么写正则表达式

javascript诞生于哪一年

vue访问元素和组件的方法(附示例)

vue组件内部实现一个双向数据绑定的代码示例

更多相关阅读请进入《javascript》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...