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

时间:2015-03-11 10:19:25

标签: javascript if-statement

我无法理解这一点。

以下表达式使用OR运算符

var subCond1 = adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true';

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

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:7)

是的,这只是JavaScript中||的一个功能,而且是故意的。它不会返回一个布尔值(必然),它的工作方式如下:它评估左侧操作数,如果该操作数是 truthy ,则返回它;否则,它会评估并返回右侧操作数。

那是什么" truthy"?任何不是" falsy"。 :-)虚假值为0""nullundefinedNaN,当然还有false。其他任何事都是真的。

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

var subCond1 = !!(adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true');

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

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

var obj = thisMayBeNull || {};

现在,obj如果它是真实的(非thisMayBeNull对象引用是真实的),则null将是{},如果是thisMayBeNull,则为&&是假的。

我的博客上的这篇文章中有更多内容:JavaScript's Curiously-Powerful OR Operator (||)

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

,这非常有用
value
如果obj falsy (例如,obj),或{null的值,则{p> obj.property将是obj的值1}}如果{{1}}是真实的。

答案 1 :(得分:1)

Javascript返回第一个具有truthy值的操作数,无论该truthy值是什么,或者如果之前没有任何值,则返回最后一个操作数的值。这是Javascript的设计特性(是的,它与其他语言不同)。

您可以通过比较将其转换为布尔值,如果您愿意,可以将其变为== true,或者有时使用!!完成。