我在javascript方面经验不多,但在其他编程语言中,可以使用以下方法为函数中的缺失参数设置默认值。
例如,假设我有一个功能
function foo(a , b)
return a + b
{
我希望能够使用1个参数或2个参数调用上述函数
一个参数案例:
foo(2) //a =2 and b would be automatically set to a default no argument value,
两个参数案例:
foo(1,2) // a = 1 , b = 2 => 3
这是否可以在兼容IE 8或使用Jquery 1.7.2的javascript中使用?
答案 0 :(得分:6)
JavaScript函数允许您使用比指定的参数更少的参数来调用它们。
您正在尝试完成的工作可能会执行以下操作:
function foo(a , b){
if(typeof b === "undefined"){
b=3;
}
return a + b;
}
foo(5);//return 3;
我强烈建议您检查undefined
和不依赖||
运算符。我花了好几个小时调试代码,这些代码在传递0
或其他假值时做出了这个假设并失败了。 JavaScript类型系统可能非常棘手,例如"0"
是假的。
ECMAScript Harmony(下一个版本)允许使用以下语法的其他语言中的默认参数
function foo(a , b=3){
return a + b;
}
这在IE8中不像第一个版本那样有用。
答案 1 :(得分:3)
是的,这是可能的。如果未传递参数,则会获得特殊值“undefined”。以下适用于我:
function foo(a, b) {
a = a || defaultForA;
b = b || defaultForB;
}
由于Javascript处理转换为布尔值的方式,以下代码片段中的以下内容都将被视为未定义:
undefined
null
0
"" (empty string)
false
因此,如果这些值对您很重要,则需要明确测试undefined而不是上面使用的一揽子“if not false”测试。
答案 2 :(得分:3)
不,但您可以使用三元运算符或if语句手动模拟此效果(只需确保检查undefined
!):
function foo(a, b) {
b = (typeof b === "undefined") ? 2 : b;
return a + b;
}
答案 3 :(得分:2)
未定义的参数的计算结果为false,因此您可以在函数foo的开始中执行类似的操作:
a = a || 0;
b = b || 0;
这样,如果a或b存在,它们将使用自己的值进行评估,否则为0。
答案 4 :(得分:2)
您可以测试是否收到参数:
function foo(a, b) {
if(typeof b === "undefined") {b = 2;}
}
通过测试" undefined"您还可以接受评估为false的参数(例如null
或""
或0
或false
)