承上篇
基本型別(primitive):資料以純值的形式存在。
物件型別(object):可能由零或多種不同型別(含純值與物件)所組成的物件。--008
// 比較物件型別
var obj1 = { value: 10 };
var obj2 = { value: 10 };
console.log(obj1 === obj2); // false
因兩個物件各別宣告,型別的記憶體位置不同,所以是 false 的結果。
舉例如下,在物件型別中複製變數,複製的是他的位址,也就是所謂的傳址。
let obj1 = { value: 10 };
let obj2 = obj1;
console.log(obj1 === obj2); // true
這部分與基本型別不一樣,為什麼是 true?我們畫來瞧瞧,實際上 obj2 複製了 obj1 的值,而這個值是 Heap 的位址,再來才是他的值。
那如果修改他的值會有什麼結果呢?
obj1.value = 30;
console.log(obj1); // 30
console.log(obj2); // 30
猜到了嗎?因為指向同一個 Heap,所以修改 obj1.value 後,obj1 跟 obj2 的結果也同時被影響。
JavaScript’s Memory Model
008天重新認識JavaScript