js的arguments的作用,js中arguments的用法
本教程运行环境:windows7系统,javascript1.8.5版本1.8.5,戴尔G3电脑。
arguments对象表示函数的参数集合,只能在函数体中看到,可以直接访问。
arguments对象的length属性和callee属性是最常用的:
使用length属性获取函数的参数个数。arguments对象只能在函数体中可见,因此arguments.length只能在函数体中使用。
使用callee属性引用当前arguments对象所在的函数。使用callee属性在函数体内调用函数本身。在匿名函数中,callee属性更有用。例如,它可以用于设计递归调用。
示例1:获取实参和形参的个数
使用arguments.length属性获取函数的参数个数。函数的参数个数可以通过使用function对象的length属性获得,该属性是只读的,在函数内部和外部都可以使用。
下面的例子设计了一个checkArg()函数,用来检查函数的形参和实参是否一致,如果不一致就抛出异常。
Function checkArg(a) {//检查函数的实际参数是否一致。
如果(a.length!=a.callee.length) //如果实际参数个数不同,会抛出错误。
抛出新错误(“参数和形式参数不一致”);
}
函数f(a,b){///求两个数的平均值
checkArg(参数);//根据实参,检查函数实参与形参是否一致。
return ((a * 1?a : 0) (b * 1?b:0))/2;//返回平均值
}
console . log(f(6));//抛出异常。调用函数f,传入参数示例2:在函数内部修改实参的值。
在下面的例子中,for循环用于遍历arguments对象,然后将循环变量的值传递给arguments,从而改变参数值。
函数f() {
for(var I=0;一.论据长度;I) {//遍历参数对象
arguments[I]=I;//修改每个参数的值
console . log(arguments[I]);//提示修改后的参数值
}
}
f(3,3,6);//返回提示0,1,2而不是3,3,6示例3:改变函数实参的个数
通过修改length属性的值,还可以更改函数的参数数量。当length属性值增加时,增加的参数值是未定义的;如果长度属性值减小,则长度值之后的参数值将被丢弃。
函数f() {
参数. length=2;//修改arguments property对象的length属性值
for(var I=0;一.论据长度;i ) {
console . log(arguments[I]);
}
}
f(3,3,6);//返回提示3,3示例4:检测用户传递的参数是否符合要求
在下面的示例中,通过使用arguments.callee获得匿名函数,然后通过函数的length属性获得函数参数的数目。最后将实际参数个数与参数个数进行比较,检查用户传递的参数是否符合要求。
函数f(x,y,z) {
var a=arguments . length();//获取函数参数的个数
var b=arguments . callee . length;//获取函数参数的个数
如果(a!=b_ {//如果实参数和形参数不相等,则给出错误信息。
抛出新错误(“传递的参数不匹配”);
}else {//如果实参和形参的个数相同,则返回它们的和。
返回x y z;
}
}
console.log(f(3,4,5));//返回值12arguments.callee相当于函数名。在上面的例子中,arguments.callee等于f。
arguments 对象的应用
在实际开发中,arguments对象非常有用。使用灵活的参数对象可以提高使用函数的灵活性,增强抽象编程中函数的适应性和纠错能力。下面的典型例子说明了论证的应用。
1) 使用arguments对象可以增强函数应用的灵活性。例如,如果一个函数的参数个数不确定,或者函数的参数个数很大,并且不想逐个定义每个参数,那么可以省略定义参数,直接使用函数体中的arguments对象来访问调用函数的参数值。
示例1
以下示例定义了一个average函数,该函数在arguments对象的帮助下计算参数的平均值。调用函数时,可以传入任意数量的参数。
函数avg() {//平均值
var num=0,1=0;//声明并初始化临时变量
for(var I=0;一.论据长度;I) {//遍历所有参数
if(参数类型[i]!=number) //如果参数不是数值
继续;//参数值被忽略。
num=参数[I];//计算参数值的总和
1 ;//统计参与求和运算的参数数量
}
num/=1;//平均值
退货数量;//返回平均值
}
console.log(avg(1,2,3,4));//返回2.5
console.log(avg(1,2, 3 ,4));//返回2.3333333333335例2
在页面设计中,经常需要验证表单中输入的值。以下示例检查文本框中输入的值是否是合法的电子邮件地址。
函数isEmail() {
If (arguments.length1)抛出新错误(“只能传递一个参数”);//检测参数的数量
var regexp=/^\w ((-\w ) (\。\w )) *\@[A-Za-z0-9] ((\。-)[A-Za-z0-9] )8\。[A-Za-z0-9]$/;//定义正则表达式
if(参数[0]。搜索(regexp)!=-1) //匹配参数的值
返回true//如果匹配,则返回true
其他
返回false//如果不匹配,则返回false
}
var email= 1798017447 @ qq.com//声明并初始化邮箱地址字符串
console.log(isEmail(电子邮件));//返回true2) arguments对象是伪类数组,不是数组。您可以通过length属性和括号语法遍历或访问参数的值。但是通过动态调用方法,也可以使用数组方法,比如push、pop、slice等。
示例3
使用参数模拟重载。方法:通过arguments.length属性的值确定实际参数的个数和类型,决定执行不同的代码。
函数sayHello() {
switch(arguments.length) {
案例0:
回‘你好’;
案例1:
返回“Hello,”参数[0];
案例二:
return (arguments[1]==cn ?Hello,: Hello,)参数[0];
};
}
console . log(say hello());//你好
console . log(say hello( Alex ));//你好,亚历克斯
console.log(sayHello(Alex , VN );//“你好,亚历克斯”示例4
下面的示例使用动态调用的方法,并让arguments对象调用array方法slice(),该方法可以将函数的parameter对象转换为数组。
函数f() {
return[]slice . apply(参数);
}
console.log(f(1,2,3,4,5,6));//Return [1,2,3,4,5,6][推荐学习:javascript高级教程]以上是如何使用javascript arguments对象的详细内容。更多请关注我们的其他相关文章!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。