簡體   English   中英

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

[英]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""nullundefinedNaN ,當然還為false 其他任何事情都是真實的。

如果您需要布爾值,那就!! 結果:

var subCond1 = !!(adj.getData('relationEnabled') == 'true' || adj.getData('unhideIfHidden') || adj.getData('hlFixed') == 'true');

...但是您經常不需要打擾。

||這種行為 確實很有用,特別是(我發現)在處理可能為null對象引用時,當您想提供默認值時:

var obj = thisMayBeNull || {};

現在, objthisMayBeNull ,如果它的truthy(非null對象引用truthy),或{}如果thisMayBeNull是falsy。

在我的博客上,本文的更多內容: JavaScript的強大OR運算符( ||

只是為了解決問題: &&運算符具有類似的行為:它計算左側的操作數,如果它是偽造的 ,則將其返回; 否則,它求值並返回右手運算符。 如果要從可能為null的變量獲取對象屬性,這將非常有用:

var value = obj && obj.property;

value將是的值obj如果objfalsy(例如, null ),或者值obj.property如果obj是truthy。

Javascript返回具有真實值的第一個操作數,無論該真實值是多少,或者如果之前沒有一個是真實的,則返回最后一個操作數的值。 那是Javascript的設計功能(是的,它與其他語言不同)。

您可以通過比較看看是否為== true來將其轉換為布爾值,或者有時用!!完成!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM