「==」與「===」運算子都是用來判斷運算元的值是否相等。
console.log('1' === 1); //false
console.log(null === null); //true
console.log(undefined === undefined); //true
console.log(null === undefined); //false
console.log(NaN === NaN); //false
console.log(NaN !== NaN); //true
console.log('ABC' === 'ABC '); //false
相等運算比較表
型別比較 | 型別 | 比較基準
------------- | -------------
相同 | string / number / boolean | 比較兩邊的值是否相等
相同 | array / object | 比較參考的目標是否相等
相同 | null / undefined | 相等於自身與對方
不同 | string / number / boolean | 將string/boolean轉型為number後比較
不同 | object | 轉型為基型值後比較
let ary1 = ['A', 'B', 'C'];
let ary2 = ['A', 'B', 'C'];
console.log(ary1 == ary2); //false
console.log(ary1 === ary2); //false
陣列是物件,屬於參考型別。意思是,陣列變數的值,不是陣列本身,而是指向陣列的記憶體位置。
上面兩個陣列是記憶體位置不同,內容相同的陣列,不管是==或是===比較的,都是變數的值,也就是記憶體位置,所以結果為false。
let ary1 = ['A', 'B', 'C'];
let ary2 = ary1;
console.log(ary1 == ary2); //true
console.log(ary1 === ary2); //true
如果ary1使用「=」運算子將值設定給ary2,也就意味著它們有相同的記憶體位置,指向同一個陣列,所以結果為true。
物件也是相同的情況:
let obj1 = {
x: 1,
y: 2
}
let obj2 = {
x: 1,
y: 2
}
let obj3 = obj1;
console.log(obj1 == obj2); //false
console.log(obj1 === obj2); //false
console.log(obj1 == obj3); //true
console.log(obj1 === obj3); //true
參考來源:
JavaScript大全
Speaking JavaScript|簡明完整的 JS 精要指南
新一代 JavaScript 程式設計精解