Javascript逻辑运算符||读取0作为假值。这有什么好的方法吗?

时间:2016-03-27 00:35:25

标签: javascript operator-keyword

抱歉,我在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!

5 个答案:

答案 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

Here's more information on the ternary operator

答案 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中,如果它是:

,则缺少该值
  1. undefined
  2. null
  3. 检查undefined的某些内容的最佳方法是严格(===)检查其类型是否与“未定义”字符串相等 - 这样您就不会得到异常如果bar无法评估。

    但是,如果您的表达式不是undefined,则可以通过比较bar===null安全地检查其值。

    因此,我们已经涵盖了这两个案例,而且我们没有获得例外。

答案 4 :(得分:1)

另一种方法是查看收到的参数数量并以此方式设置default值。

function foo(bar){
    if (arguments.length === 0) {
      return -1;
    }
    return bar;
}