揭開JavaScript 中空數組的神秘本質
JavaScript 中的空數組表現出一種奇特的二元性,看起來既是真又是假。這種令人困惑的行為源自於相等運算子執行的隱式轉換。為了深入研究底層機制,讓我們來探索下面的程式碼片段:
<br>var arr = [];<br>console.log('Array:', arr);<br> if (arr) console.log("這是真的!");<br>if (arr == false) console.log("這是假的!");<br>if (arr && arr == false) console .log("...what??");<br>
第一個if 語句驗證arr 物件是否存在(Array 是Object 的實例),傳回true。然而,帶有 arr == false 的 if 語句將 arr 物件的值與 false 的原始值進行比較。為了執行此比較,隱式呼叫 arr.toString(),傳回空字串「」。
此結果由 Array.join() 的行為解釋。當對數組呼叫 toString() 時,它會傳回對該數組呼叫 join() 的串聯結果。由於陣列為空,因此結果是一個空字串,這屬於 JavaScript 中的假值類別。因此,arr.toString() 的計算結果為 false,導致 if (arr == false) 傳回 true。
if (arr && arr == false) 的特殊情況突出了邏輯 AND ( &&) 操作員。為了使整個陳述為真,兩個條件都必須計算為真值。 arr 本身是 true,但由於前面提到的隱含轉換,arr == false 的計算結果為 true。因此,合取結果為真,導致看似矛盾的「這是假的!」輸出。
以上是為什麼 JavaScript 中的空數組看起來既正確又錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!