首頁 > web前端 > js教程 > 為什麼我們不能將數組和對象與===進行比較

為什麼我們不能將數組和對象與===進行比較

DDD
發布: 2025-01-29 20:37:08
原創
535 人瀏覽過

Why can’t we compare arrays and objects with ===

>本文探討了一個常見的JavaScript問題:為什麼在比較數組和對象時,嚴格的平等運算符(===)無法正常工作。 我們將深入研究JavaScript的內部工作以了解這種行為。 JavaScript

區分原始數據類型和非主要數據類型。 原始類型(布爾,零,未定義,字符串,數字)是按值傳遞的,而非略有類型(數組,函數和對象 - 所有技術對象)通過參考傳遞。

原始類型的行為(按價值傳遞)>

>聲明一個原始變量時,該值會直接存儲:>

非主要類型行為(通過參考通過)

>

非主體變量存儲在對象的內存位置,而不是對象本身:>

const name = 'John';
const age = 25;
登入後複製
最初,

>保留指向空數組的引用(例如,內存地址H001)。 fruits之後,修改了H001的陣列。 push()>

>參考複製

>使用

複製參考變量時,您複製了參考,而不是對象的數據:> =

<>>
const fruits = [];
fruits.push('Banana');
登入後複製

現在指向相同的內存位置。 修改一個修改另一個。 fruits> yellowFruits>將'菠蘿'添加到

>也會更改

,因為它們共享相同的參考。 yellowFruitsfruits>重新分配參考變量

重新分配參考變量會創建一個新的參考:>

原始對象

保留在內存中,但是

現在指向一個新對象
const fruits = ['Banana'];
const yellowFruits = fruits;
登入後複製

{ name: 'John' }為什麼person{ name: 'Mary' }因數組和對象而失敗

> ===運算符比較非主要類型的參考。 因此:

>即使===>和

具有相同的內容,它們也具有不同的內存地址,從而在
let person = { name: 'John' };
person = { name: 'Mary' };
登入後複製
>中。

arr1函數參數和純度arr3false> 將原始值傳遞給函數的

複製該值。 但是,傳遞對象通過參考。 這種區別對於理解純粹的和不純粹的函數至關重要。

>

純函數:

>不要修改外部狀態。 它們僅在輸入上運行並產生可預測的輸出。

>
  • 不純粹的函數:可以修改作為參數傳遞的對象,影響函數範圍之外的原始對象。
  • 創建一個修改對象的純函數,在修改之前創建副本:>
  • >在摘要

原始類型按值傳遞;非主要類型是通過參考傳遞的。
const arr1 = ['1'];
const arr2 = arr1;  // Same reference

console.log(arr1 === arr2); // true

const arr3 = ['1']; // Different reference
console.log(arr1 === arr3); // false
登入後複製

比較非主要類型的參考。 > 理解參考複製對於編寫可預測和可維護的代碼至關重要。

>
    純函數通過不修改外部狀態來避免副作用。
  1. >
  2. 要深入研究JavaScript內存管理,請探索呼叫堆棧和內存堆。 ===

以上是為什麼我們不能將數組和對象與===進行比較的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板