4

可能重复:
JavaScript:对于非布尔值,“z=(x||y)”是否与“z=x?x:y”相同?

以下两行代码在javascript中是否等效?

a = b ? b : c

a = b || c

我想表达:“如果b是真实的,a应该被分配b,否则应该被分配c”

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

4

2 回答 2

4

是的。两者几乎完全相同。

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


正如@thesystem 所指出的,如果您有一个 getter 方法 on b,它将为三元组调用两次,但对于 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/

于 2013-01-31T00:37:48.093 回答
1

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

参考:逻辑运算符 - MDN

于 2013-01-31T00:46:33.153 回答