Javascript返回OR(| |)操作的字符串
我无法理解这一点 下面是表达式使用的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中|的特性之一,而且是经过深思熟虑的。它不返回布尔值
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:不,()
对结果值没有影响。应该有人使用&&运算符来编写。英雄联盟