探索Javascript中的其余参数和参数默认值
在一般情况下,我们需要创建一个可变参数函数,即函数可以接受任意数量的参数,例如,string.prototype.concat可以接受任意数量的字符串作为参数,用余下的6参数,为我们提供了创建可变参数函数的一种新方法。
让我们实现一个功能,包含所有,看看一些字符串中包含一个字符串,例如,包含所有(香蕉
以下是传统的实施方式
函数包含所有(大海捞针){
对于(var i = 1;i < arguments.length;i++){
变量指针=参数{ };
如果(haystack.indexof(针)= 1){
返回false;
}
}
返回true;
}
函数包含所有(大海捞针){
对于(var i = 1;i < arguments.length;i++){
变量指针=参数{ };
如果(haystack.indexof(针)= 1){
返回false;
}
}
返回true;
}
实施使用实参对象,这是一个类对象数组,其中包含一个参数列表的函数被调用时,这个代码就是我们想要的,但它的可读性是不是最好的。只有一个函数参数的草垛,所以它是不可能看到这个功能需要多个参数,和参数的遍历,我们需要特别注意导线的起始索引是1,而不是常见的0,因为论点{ 0 }是草堆的参数的函数定义,如果我们想干草堆参数之前或之后添加一些参数,我们必须更新内部循环。其余的参数的解决这些问题,然后是用余下的PAR的实现ameter:
函数包含所有(草堆,…针){
用于(var针){
如果(haystack.indexof(针)= 1){
返回false;
}
}
返回true;
}
函数包含所有(草堆,…针){
用于(var针){
如果(haystack.indexof(针)= 1){
返回false;
}
}
返回true;
}
上述两种实现都满足我们的需求,但后者包含一个特殊的…针语法。我们看看调用containsAll(香蕉在这个电话中,针的价值是{B 然后,执行正常的功能。
只有最后的功能,其余的参数,调用函数,其余的参数将在灌装前是正常的,外面的参数将被存放在一个数组的数组,和作为其他参数的值,如果没有参数,那么其余的参数的值是一个空数组{ },其余的参数的值没有定义。
参数的默认值
通常,当一个函数被调用时,调用方不需要通过所有可能的参数,而参数不通过需要一个合理的默认value.javascript具有固定的默认值定义的那些参数,都没有通过。在6,引入一种新的方法来指定任何参数的默认值。
请看下面的例子:
功能animalsentence(动物= 老虎
返回`狮子和$ { }和{ animals3 }美元的动物!哦,我的!;
}
功能animalsentence(动物= 老虎
返回`狮子和$ { }和{ animals3 }美元的动物!哦,我的!;
}
在每个参数的末尾是一个表达式,指定默认值时,参数不及格。所以,animalsentence()返回到狮子、老虎和熊!哦,我的!
需要注意的参数缺省值的几个细节:
与python不同,当调用函数时,默认值的表达式是从左到右计算的,这意味着表达式可以使用以前填充的参数:
功能animalsentencefancy(动物= 老虎
animals3 =(动物= =熊)海狮:熊)
{
返回`狮子和$ { }和{ animals3 }美元的动物!哦,我的!;
}
功能animalsentencefancy(动物= 老虎
animals3 =(动物= =熊)海狮:熊)
{
返回`狮子和$ { }和{ animals3 }美元的动物!哦,我的!;
}
然后,animalsentencefancy(熊)将返回狮子和熊和海狮。哦,我的!。
未定义的转移相当于未能通过此参数。因此,animalsentence(定义,独角兽)将返回老虎狮子和独角兽!哦,我的!。
如果没有为参数指定默认值,则参数的默认值未定义,因此
The copy code code is as follows: function myFunc (a=42, b) {...}
功能myfunc(A = 42,B){…}
等同于
复制代码代码如下:功能myfunc(A = 42,B = undefined){…}
功能myfunc(A = 42,B = undefined){…}
放弃争论
使用REST参数和参数的默认值,我们可以完全放弃参数对象,使代码更可读。此外,参数对象还进一步优化Javascript的优化问题。
希望上述两个新功能完全可以替代参数。在使用其他参数或默认参数值的第一步,避免使用参数对象,如果参数对象将不会被立即删除,或者没有,所以最好是避免使用参数对象使用其余的参数或参数的默认值价值。
兼容性
这两个新特性得到了Firefox 15多个版本的支持,但是除了这一点之外,没有其他浏览器。该公司也有一些问题,其余的参数和参数的默认值。
两个编译器,Babel名,支持参数的默认值,所以你可以大胆地使用它。
结论
虽然从技术上讲,这两个新特性不会向函数引入新的行为,但它们可以使某些函数的声明更具表达性和可读性。
以上是本文的全部内容,希望能对大家有所帮助。