JS-兩個空數組為什麽不相等?
阿新 • • 發佈:2018-04-25
引用類型 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-兩個空數組為什麽不相等?