---
# System prepended metadata

title: 從 Object 的等號真正的理解變數儲存模型

---

# 從 Object 的等號真正的理解變數儲存模型
> 此篇章為上完 [JavaScript 全攻略：克服 JS 的奇怪部分](https://www.udemy.com/course/javascriptjs/) 和看完 [從博物館寄物櫃理解變數儲存模型](https://hulitw.medium.com/variable-and-frontdesk-a53a0440af3c) 後經過個人領悟所整理的筆記，若有謬誤請不吝告知，非常感謝！

**當你想存取的變數是「純值」 Primitive values （數字、字串等等）的時候，變數裡面存的內容就真的是那個值。
但如果你想存物件的時候，變數裡面存的內容其實是記憶體位址。**

``` js
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`，儘管它們的的記憶體位址不同。