是的,这只是它的特点之一||
在 JavaScript 中,这是经过深思熟虑的。它doesn't返回一个布尔值(必然),它的工作原理如下:它计算左侧操作数,如果该操作数是truthy,它返回它;否则,它计算并返回右侧操作数。
那么什么是“真实”呢?任何不“虚假”的东西。 :-) 虚假值是0
, ""
, null
, undefined
, NaN
, 而且当然,false
。其他的都是实话。
If you need一个布尔值,只是!!
结果:
var subCond1 = !!(adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true');
...但您通常不需要打扰。
这种行为的||
确实很有用,特别是(我发现)在处理可能是的对象引用时null
,当您想提供默认值时:
var obj = thisMayBeNull || {};
Now, obj
将thisMayBeNull
如果它是真的(非null
对象引用是真实的),或者{}
if thisMayBeNull
是假的。
更多内容请参见我的博客上的这篇文章:JavaScript 极其强大的 OR 运算符 (||)
只是为了解决问题:&&
运算符具有类似的行为:它计算左侧操作数,如果它是falsy,返回它;否则,它会计算并返回右侧运算符。如果您想要来自变量的对象属性(可能是),这很有用null
:
var value = obj && obj.property;
value
将是obj
if obj
is falsy(例如,null
),或值obj.property
if obj
是真的。