以下两行代码在javascript中是否等效?
a = b ? b : c
a = b || c
我想表达:“如果b是真实的,a应该被分配b,否则应该被分配c”
我希望它们的工作方式完全相同,但我不能 100% 确定。
以下两行代码在javascript中是否等效?
a = b ? b : c
a = b || c
我想表达:“如果b是真实的,a应该被分配b,否则应该被分配c”
我希望它们的工作方式完全相同,但我不能 100% 确定。
是的。两者几乎完全相同。
两者都将首先评估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/
逻辑运算符通常与布尔(逻辑)值一起使用;当它们存在时,它们返回一个布尔值。但是,&& 和 || 运算符实际上返回指定操作数之一的值,因此如果这些运算符与非布尔值一起使用,它们可能返回非布尔值。
参考:逻辑运算符 - MDN