抱歉,我在javascript方面有点像菜鸟。但这是我的问题: 当输入0时,以下函数返回-1
function foo(bar){
return bar || -1;
}
foo(0);
是否有一种优雅的方式来允许||运算符读取0(特别是0,而不是所有的假值)作为有效值,以便函数返回0?或者我必须这样做:
function foo(bar){
if(bar === 0){
return 0;
} else {
return bar || -1;
}
}
foo(0);
编辑:
谢谢大家的答案! 对于那些想知道的人,问题是要求用可选参数找到相同问题的解决方案。以下代码是如何应用它的示例。
function Point(x,y,meta){ //meta is an optional parameter. In this case I wanted to set meta to 0, but it was being set to null.
this.x = x;
this.y = y;
//this.meta = meta || null; This line is the old code that would set meta to null when 0 is inputed.
this.meta = meta === 0 ? 0 : (meta || null); //the fix suggested by many users is applied here.
};
var foo = new Point(1,2,0);
console.log(foo.meta); //foo.meta is now 0 instead of null!
答案 0 :(得分:1)
你能得到的最紧的是将你的if-else折叠成一个单一的回报,la:
return bar === 0 ? bar : (bar || -1);
因为||比较truthy / falsy值,你必须明确处理(使用强类型)0
案例。
很难从你的问题中判断出来,但通常当我压倒比较的真实/虚假性质时,它就是默认值。在这种情况下,它是检测我的函数是否被赋予了未定义的值,并在其位置使用一些合理的默认值。
答案 1 :(得分:1)
您可以使用三元运算符重写foo:
function foo(bar) {
return bar === 0 ? 0 : (bar || -1)
}
三元运算符的语法是condition ? expr1 : expr2
。如果condition
真实,则会返回expr1
,否则会返回expr2
。
答案 2 :(得分:1)
这就是JavaScript的工作方式。所有值都是真或假。零恰好是一个虚假的价值。您可以通过三元组简化您的功能。
function foo(bar) {
return bar === 0 ? 0 : (bar || -1);
}
答案 3 :(得分:1)
function foo(bar){
return typeof bar === "undefined" || bar === null ? -1 : bar;
}
foo(0); // should give 0
foo(false); // should give false
var a; // undefined variable
foo(a); // should give -1
foo(null); // should give -1
var b = {}; // object
foo(b.a); // should give -1 (undefined property)
嗯,这个if
的目的是检查缺失(不存在)的值。在JavaScript中,如果它是:
undefined
null
检查undefined
的某些内容的最佳方法是严格(===)检查其类型是否与“未定义”字符串相等 - 这样您就不会得到异常如果bar
无法评估。
但是,如果您的表达式不是undefined
,则可以通过比较bar===null
安全地检查其值。
因此,我们已经涵盖了这两个案例,而且我们没有获得例外。
答案 4 :(得分:1)
另一种方法是查看收到的参数数量并以此方式设置default
值。
function foo(bar){
if (arguments.length === 0) {
return -1;
}
return bar;
}