Pra*_*tel 1 javascript if-statement
我无法理解这一点.
以下是表达式使用OR运算符
var subCond1 = adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true';
Run Code Online (Sandbox Code Playgroud)
我期待它,因为它是OR操作,它应该返回布尔值true/false,但结果我得到字符串'false'.
有人能解释一下吗?
是的,这只是||
JavaScript 中的一个特性,而且是故意的.它不返回布尔值(必然),它的工作原理如下:它计算左操作数,如果该操作数是真实的,则返回它; 否则,它会评估并返回右侧操作数.
什么是"真实的"?任何不是"虚假"的东西.:-)的falsy值是0
,""
,null
,undefined
,NaN
,当然,false
.其他任何事都是真的.
如果你需要一个布尔值,只需要!!
结果:
var subCond1 = !!(adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true');
Run Code Online (Sandbox Code Playgroud)
...但你经常不需要打扰.
这种行为||
非常有用,特别是(我发现)在处理可能的对象引用null
时,如果要提供默认值:
var obj = thisMayBeNull || {};
Run Code Online (Sandbox Code Playgroud)
现在,obj
将是thisMayBeNull
如果它是truthy(非null
对象引用truthy),或者{}
如果thisMayBeNull
是falsy.
更多在我的博客上的这篇文章中:JavaScript的奇怪强大OR运算符(||
)
只是为了解决问题:&&
运算符有类似的行为:它评估左手操作数,如果它是假的,则返回它; 否则它会评估并返回右手操作员.如果您想要一个变量的对象属性,这可能是有用的null
:
var value = obj && obj.property;
Run Code Online (Sandbox Code Playgroud)
value
将是obj
if 的值obj
是falsy(例如,null
),或obj.property
if 的值obj
是真的.
归档时间: |
|
查看次数: |
41 次 |
最近记录: |