javascript三元语句等价

时间:2013-01-31 00:34:56

标签: javascript

  

可能重复:
  JavaScript: Is “z=(x||y)” same as “z=x?x:y” for non-boolean?

以下两行代码在javascript中是否相同?

a = b ? b : c

a = b || c

我想表达:"如果b是真实的话应该分配b,否则应该分配c"

我希望他们的工作方式完全相同,但我并不是100%确定。

2 个答案:

答案 0 :(得分:4)

是。两者几乎完全相同。

两者都将首先评估b。如果它真实,它将返回b。否则,它将返回c


正如@thesystem所指出的,如果你在b上有一个getter方法,那么它将被三次调用,但只有一次用于or语句。

使用以下代码段测试它:

var o = {};
o.__defineGetter__("b", function() {
    console.log('ran');
    return true;
});

var d = o.b || o.not;

console.log('-----');

var d = o.b ? o.b : o.not;

这是小提琴:http://jsfiddle.net/bqsey/

答案 1 :(得分:1)

  

逻辑运算符通常与布尔(逻辑)值一起使用;   当它们是时,它们返回一个布尔值。然而,&&和||   运算符实际上返回一个指定操作数的值,   因此,如果这些运算符与非布尔值一起使用,它们可能会   返回非布尔值。

参考:Logical Operators - MDN