1. 程式人生 > >JS-兩個空數組為什麽不相等?

JS-兩個空數組為什麽不相等?

引用類型 span 引用 一個 解析 答案 屬性 ole con

var a = [], b = [];
console.log(a==b);

  控制臺的打印結果是什麽?答案是:false。

  接下來看解析:

  原始值的比較是值的比較:

    它們的值相等時它們就相等(==)

    它們的值和類型都相等時它們就恒等(===)。

  對象和原始值不同,對象的比較並非值的比較,而是引用的比較:

    即使兩個對象包含同樣的屬性及相同的值,它們也是不相等的

    即使兩個數組各個索引元素完全相等,它們也是不相等的

  舉個栗子:

var o = {x:1}, p = {x:1};      // 具有相同屬性的兩個對象
o == p                        //
=> false: 兩個單獨的對象永不相等 var a = [], b = []; // 兩個單獨的空數組 a == b // => false: 兩個單獨的數組永不相等

  我們通常將對象稱為引用類型(reference type),以此來和JavaScript的基本類型區分開來。對象值都是引用(reference),對象的比較均是引用的比較:當且僅當它們引用同一個基對象時,它們才相等。

  舉個栗子:

var a = [];  // 定義一個引用空數組的變量a
var b = a;   // 變量b引用同一個數組
b[0] = 1;    //
通過變量b來修改引用的數組 a[0] // => 1: 變量a也會修改 a === b // => true:a和b引用同一個數組,因此它們相等

JS-兩個空數組為什麽不相等?