[英]Javascript returns string for OR(||) operation
我不明白這一點。
以下是表達式使用OR運算符
var subCond1 = adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true';
我期望由於它是“或”運算,因此應該返回布爾值true / false,但是結果是字符串'false'。
誰能解釋一下?
是的,這只是||
的功能之一 在JavaScript中,這是故意的。 它不返回布爾值(必需),它的工作方式如下:計算左操作數,如果該操作數為true ,則返回它; 否則,它評估並返回右側的操作數。
那么什么是“真實的”? 任何不是“虛假”的東西。 :-)偽造的值為0
, ""
, null
, undefined
, NaN
,當然還為false
。 其他任何事情都是真實的。
如果您需要布爾值,那就!!
結果:
var subCond1 = !!(adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true');
...但是您經常不需要打擾。
||
這種行為 確實很有用,特別是(我發現)在處理可能為null
對象引用時,當您想提供默認值時:
var obj = thisMayBeNull || {};
現在, obj
將thisMayBeNull
,如果它的truthy(非null
對象引用truthy),或{}
如果thisMayBeNull
是falsy。
在我的博客上,本文的更多內容: JavaScript的強大OR運算符( ||
)
只是為了解決問題: &&
運算符具有類似的行為:它計算左側的操作數,如果它是偽造的 ,則將其返回; 否則,它求值並返回右手運算符。 如果要從可能為null
的變量獲取對象屬性,這將非常有用:
var value = obj && obj.property;
value
將是的值obj
如果obj
是falsy(例如, null
),或者值obj.property
如果obj
是truthy。
Javascript返回具有真實值的第一個操作數,無論該真實值是多少,或者如果之前沒有一個是真實的,則返回最后一個操作數的值。 那是Javascript的設計功能(是的,它與其他語言不同)。
您可以通過比較看看是否為== true
來將其轉換為布爾值,或者有時用!!
完成!!
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.