可能重复:
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%确定。
答案 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;
答案 1 :(得分:1)
逻辑运算符通常与布尔(逻辑)值一起使用; 当它们是时,它们返回一个布尔值。然而,&&和|| 运算符实际上返回一个指定操作数的值, 因此,如果这些运算符与非布尔值一起使用,它们可能会 返回非布尔值。