理解JavaScript 中的邏輯運算子:為什麼它們可以傳回物件
在JavaScript 中,邏輯運算子如&&(與)和)和算符|| (or) 通常期望計算為布林值(true 或false)。但是,在某些情況下,它們也可以傳回物件。這種令人驚訝的行為最初可能會讓您感到困惑。
為了深入研究這個現象,讓我們分析以下程式碼片段:
var _ = (obj.fn && obj.fn()) || obj._ || (obj._ = {}); var _ = obj && obj._;
在第一個範例中,最初評估 obj.fn。如果已定義,則傳回表達式 obj.fn() 的結果。否則,將計算表達式 obj._,或者如果 obj.fn 和 obj._ 都不存在,則建立一個新物件。
類似地,在第二個範例中,先計算 obj。如果 obj 存在(計算結果為 true),則結果是 obj._ 的值。但是,如果 obj 不存在(計算結果為 false),則傳回原始 obj 值本身。
揭示邏輯短路行為
此行為源自於從 && 和 || 的邏輯短路性質來看。換句話說,這些運算子試圖盡快返回一個“邏輯值”,避免在結果已經明確的情況下進行不必要的計算。
在 || 的情況下,如果左側表達式的計算結果為true,它會立即傳回,且右側表達式根本不會被求值。相反,如果左側表達式計算結果為 false,則計算右側表達式並傳回。
JavaScript 中的錯誤和值回傳
另一個方面影響這種行為的是 JavaScript 中處理假值的方式。 JavaScript 中的假值包括 false、0、NaN、空字串、null 和 undefined。
在 JavaScript 1.2 版本之前,||當表達式計算結果為 false 時傳回 false。然而,從版本 1.2 開始,它會傳回表達式的實際值。這表示如果左側表達式為 false,則會傳回右側表達式的值。
同樣,對於 &&,如果左側表達式的計算結果為 true,則右側表達式的值被求值,並傳回其值。但是,如果左側表達式的計算結果為 false,則在 JS 1.0 和 1.1 中傳回 false,而從 JS 1.2 開始傳回左側表達式的值。
結論
理解邏輯短路行為和 JavaScript 對假值的處理對於理解邏輯運算符的回傳值有時令人驚訝。透過認識到這些運算符優先考慮效率,並且錯誤在 JavaScript 中可能有不同的解釋,您可以自信地駕馭這些運算符的複雜性。
以上是JavaScript 邏輯運算子如何傳回物件?的詳細內容。更多資訊請關注PHP中文網其他相關文章!