Javascript返回OR(||)操作的字符串

Pra*_*tel 1 javascript if-statement

我无法理解这一点.

以下是表达式使用OR运算符

var subCond1 = adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true';
Run Code Online (Sandbox Code Playgroud)

我期待它,因为它是OR操作,它应该返回布尔值true/false,但结果我得到字符串'false'.

有人能解释一下吗?

T.J*_*der 7

是的,这只是||JavaScript 中的一个特性,而且是故意的.它返回布尔值(必然),它的工作原理如下:它计算左操作数,如果该操作数是真实的,则返回它; 否则,它会评估并返回右侧操作数.

什么是"真实的"?任何不是"虚假"的东西.:-)的falsy值是0,"",null,undefined,NaN,当然,false.其他任何事都是真的.

如果你需要一个布尔值,只需要!!结果:

var subCond1 = !!(adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true');
Run Code Online (Sandbox Code Playgroud)

...但你经常不需要打扰.

这种行为||非常有用,特别是(我发现)在处理可能的对象引用null时,如果要提供默认值:

var obj = thisMayBeNull || {};
Run Code Online (Sandbox Code Playgroud)

现在,obj将是thisMayBeNull如果它是truthy(非null对象引用truthy),或者{}如果thisMayBeNull是falsy.

更多在我的博客上的这篇文章中:JavaScript的奇怪强大OR运算符(||)

只是为了解决问题:&&运算符有类似的行为:它评估左手操作数,如果它是假的,则返回它; 否则它会评估并返回右手操作员.如果您想要一个变量的对象属性,这可能是有用的null:

var value = obj && obj.property;
Run Code Online (Sandbox Code Playgroud)

value将是objif 的值objfalsy(例如,null),或obj.propertyif 的值obj是真的.