我无法理解这一点。
以下是使用OR运算符的表达式
var subCond1 = adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true';
我期望因为它是 OR 运算,所以它应该返回 bool 值 true/false,但结果却得到字符串“false”。
有人能解释一下吗?
最佳答案
是的,这只是 ||
的功能之一在 JavaScript 中,这是故意的。它不返回一个 bool 值(必然),它是这样工作的:它评估左边的操作数,如果那个操作数是真实的,它返回它;否则,它计算并返回右侧的操作数。
那么什么是“真实”?任何不是“虚假”的东西。 :-) 虚假值是 0
, ""
, null
, undefined
, NaN
,当然还有 false
.其他都是真实的。
如果您需要一个 bool 值,只需!!
结果:
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 ( ||
)
只是为了解决问题:&&
运算符有类似的行为:它计算左边的操作数,如果它是falsy,则返回它;否则它计算并返回右边的运算符。如果你想要一个可能是 null
的变量的对象属性,这很有用。 :
var value = obj && obj.property;
value
将是 obj
的值如果obj
是 falsy(例如 null
),或者 obj.property
的值如果obj
是真实的。
关于Javascript 为 OR(||) 操作返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983907/