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

标签 javascript if-statement

我无法理解这一点。

以下是使用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 的值如果objfalsy(例如 null ),或者 obj.property 的值如果obj是真实的。

关于Javascript 为 OR(||) 操作返回字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983907/

相关文章:

javascript - Lodash _.merge 函数问题

java - 难以理解计数和平均值

java - 如何检查数组是否已满,如果未满则添加到它?

c++ - 如果任何余数的总和是奇数,则加 11 *除非*加 11 导致

javascript - 使用 webpack 时出现错误 : Cannot 'file' or 'directory' ./lib/React

javascript - 防止重复提交表单

用于计算的 Javascript for 循环

javascript - d3.js onclick 事件使用单击时而不是绘制时的变量值

java - 在if条件下一起评估多个变量

java - 将许多 "else if"替换为其他内容