>本文探討了一個常見的JavaScript問題:為什麼在比較數組和對象時,嚴格的平等運算符(===
)無法正常工作。 我們將深入研究JavaScript的內部工作以了解這種行為。
JavaScript
原始類型的行為(按價值傳遞)>
>聲明一個原始變量時,該值會直接存儲:
非主要類型行為(通過參考通過)
>非主體變量存儲在對象的內存位置,而不是對象本身:
const name = 'John'; const age = 25;
>保留指向空數組的引用(例如,內存地址H001)。 fruits
之後,修改了H001的陣列。 push()
>
>參考複製
>使用複製參考變量時,您複製了參考,而不是對象的數據:=
const fruits = []; fruits.push('Banana');
現在指向相同的內存位置。 修改一個修改另一個。 fruits
>
yellowFruits
>將'菠蘿'添加到
,因為它們共享相同的參考。
yellowFruits
fruits
>重新分配參考變量
重新分配參考變量會創建一個新的參考:
保留在內存中,但是
現在指向一個新對象const fruits = ['Banana']; const yellowFruits = fruits;
{ name: 'John' }
為什麼person
{ name: 'Mary' }
因數組和對象而失敗
>
===
運算符比較非主要類型的參考。 因此:
>即使===
>和
let person = { name: 'John' }; person = { name: 'Mary' };
arr1
函數參數和純度arr3
false
>
將原始值傳遞給函數的
>
純函數:>不要修改外部狀態。 它們僅在輸入上運行並產生可預測的輸出。
>原始類型按值傳遞;非主要類型是通過參考傳遞的。
const arr1 = ['1']; const arr2 = arr1; // Same reference console.log(arr1 === arr2); // true const arr3 = ['1']; // Different reference console.log(arr1 === arr3); // false
比較非主要類型的參考。
===
以上是為什麼我們不能將數組和對象與===進行比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!