Coding / Programming Videos

Post your favorite coding videos and share them with others!

[JavaScript Weird 支線]Day 53 — 「==」和「===」 – pvt5r486 – Medium

Source link

原始型別與物件型別的差異

之前提到一些原始型別 ( Primitive Types ) 與物件型別 ( Object Types )的差異,這邊將提到另外一個差異:

  • 與原始型別不同,物件型別是比較記憶體位址
var obj = { number: 1 }
var obj2 = obj;
console.log(obj === obj2); // true

眼尖的你應該會發現,比較表上明明寫著兩個物件相比都是 false ,那麼為什麼這邊會是 true 呢?

我們可以把這段 code 在記憶體的樣子畫出來:

可以發現變數 obj 與 obj2 都是指向同一個記憶體位址,因此第三行的比較其實是「比較兩個變數指向的記憶體位址」,既然兩個變數都指向同一個記憶體位址,那麼答案自然會是 true 。

同理,修改一下例子,並畫圖了解:

var obj = { number: 1 }
var obj2 = { number: 1 }
console.log(obj === obj2); // false

由前一個例子可知,物件型別之間的比較比的是記憶體的位址,從這張圖看來,兩個 {} 物件在記憶體中的位置並不相同,所以比較的結果才會是 false。

這樣就可驗證為什麼只要是物件型別之間的比較都會是 false 了,因為只要產生一個新物件,就會是不同的記憶體位址。

而有哪些是物件型別呢?

只要不屬於原始型別的那六種,都是物件型別。這倒是可以用很簡單的二分法來判斷。

Source link

Bookmark(0)
 

Leave a Reply

Please Login to comment
  Subscribe  
Notify of
Translate »