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

Javascript返回OR(| |)操作的字符串,javascript,if-statement,Javascript,If Statement,我无法理解这一点 下面是表达式使用的OR运算符 var subCond1 = adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true'; 我希望由于它是OR操作,所以它应该返回布尔值true/false,但结果是字符串'false' 有人能解释一下吗?是的,这只是JavaScript中|的特性之一,而且是经过深思熟虑的。它不返回布尔值

我无法理解这一点

下面是表达式使用的OR运算符

var subCond1 = adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true';
我希望由于它是OR操作,所以它应该返回布尔值true/false,但结果是字符串'false'


有人能解释一下吗?

是的,这只是JavaScript中
|
的特性之一,而且是经过深思熟虑的。它不返回布尔值(必须),它的工作原理如下:它计算左侧操作数,如果该操作数是truthy,则返回它;否则,它求值并返回右侧操作数

那么什么是“真实”?任何不是“假”的东西:-)falsy值是
0
null
未定义的
NaN
,当然还有
false
。其他一切都是真实的

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

var subCond1 = !!(adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true');
…但你通常不需要麻烦

|
的这种行为非常有用,尤其是(我发现)在处理可能为
null的对象引用时,当您希望提供默认值时:

var obj = thisMayBeNull || {};
现在,
obj
将是
thisMayBeNull
,如果它是真实的(非
null
对象引用是真实的),或者
{}
如果
thisMayBeNull
是虚假的

在我的博客上的这篇文章中有更多内容:

四舍五入:
&&
运算符有类似的行为:它计算左侧操作数,如果它是falsy,则返回它;否则,它将计算并返回右侧运算符。如果希望从可能为
null
的变量中获取对象属性,则此选项非常有用:

var value = obj && obj.property;

value
将是
obj
的值,如果
obj
是falsy(例如,
null
),或者
obj.property
的值,如果
obj
是真的。

是的,这只是JavaScript中
|
的特性之一,这是经过深思熟虑的。它不返回布尔值(必须),它的工作原理如下:它计算左侧操作数,如果该操作数是truthy,则返回它;否则,它求值并返回右侧操作数

那么什么是“真实”?任何不是“假”的东西:-)falsy值是
0
null
未定义的
NaN
,当然还有
false
。其他一切都是真实的

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

var subCond1 = !!(adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true');
…但你通常不需要麻烦

|
的这种行为非常有用,尤其是(我发现)在处理可能为
null的对象引用时,当您希望提供默认值时:

var obj = thisMayBeNull || {};
现在,
obj
将是
thisMayBeNull
,如果它是真实的(非
null
对象引用是真实的),或者
{}
如果
thisMayBeNull
是虚假的

在我的博客上的这篇文章中有更多内容:

四舍五入:
&&
运算符有类似的行为:它计算左侧操作数,如果它是falsy,则返回它;否则,它将计算并返回右侧运算符。如果希望从可能为
null
的变量中获取对象属性,则此选项非常有用:

var value = obj && obj.property;

value
将是
obj
的值,如果
obj
是falsy(例如,
null
),或者
obj.property
的值是truty。

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


您可以通过比较将其转换为布尔值,查看它是否为
==true
(如果您愿意),或者它有时是用
完成的

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


您可以通过比较将其转换为布尔值,查看它是否为
==true
(如果您愿意),或者它有时是用
完成的

@Sirko:No,
()
对结果值没有影响。应该有人使用&&运算符来编写。lol.@Sirko:不,
()
对结果值没有影响。应该有人使用&&运算符来编写。英雄联盟