let a = [1, 2, 3]
let b = [1, 2, 3]
console.log(a === b) // false
let c = 123
let d = 123
console.log(c === d) // true
let obj1 = {a: 1}
let obj2 = {a: 1}
console.log(obj1 === obj2) // false
a 跟 b 看起來長的一樣卻不相等是因為變數存取物件(包含函數和陣列)內容的方式是存取記憶體位置,a 與 b 指向不同記憶體位置,所以不相等,obj1 和 obj2 同理。然而,c 和 d 存取的內容是純值(這邊是數值),內容就是值本身,所以 c === d 的結果為 true,儘管它們的的記憶體位址不同。
從 Object 的等號真正的理解變數儲存模型
當你想存取的變數是「純值」 Primitive values (數字、字串等等)的時候,變數裡面存的內容就真的是那個值。 但如果你想存物件的時候,變數裡面存的內容其實是記憶體位址。
a 跟 b 看起來長的一樣卻不相等是因為變數存取物件(包含函數和陣列)內容的方式是存取記憶體位置,a 與 b 指向不同記憶體位置,所以不相等,obj1 和 obj2 同理。然而,c 和 d 存取的內容是純值(這邊是數值),內容就是值本身,所以
c === d
的結果為true
,儘管它們的的記憶體位址不同。