JavsScript 的資料型別分成兩大類,第一類是基本型別,第二類是物件型別,型別的介紹可以參考前面的文章,今天要來講的是兩種型別在記憶體上儲存的差異,分為傳值與傳址。
基本型別(primitive):資料以純值的形式存在。
物件型別(object):可能由零或多種不同型別(含純值與物件)所組成的物件。--008
今天先來講基本型別的傳值概念
舉例如下情況:
比較基本型別得到結果是 true,而比較物件型別結果卻是 false。因 a、b 這兩個變數屬基本型別所以判斷的是他的值;obj1 跟 obj2 是物件型別,因各別宣告記憶體位置不同,所以才會有 false 的結果。
// 基本型別
var a = 10;
var b = 10;
console.log(a === b); // true
// 物件型別
var obj1 = { value: 10 };
var obj2 = { value: 10 };
console.log(obj1 === obj2); // false
在基本型別中複製變數,複製的是那個變數的值,所以 a 重新賦值的時候不影響 b:
var a = 10;
var b = a;
a = 20;
console.log(a); // 20
console.log(b); // 10,為什麼 b = a,結果 b 不是 20?
b 複製 a 的時候是指向同一個 stack,
當 a 重新賦值,實際上舊的值會留著不會被修改,然後記憶體會新增一個位址指向 20,
圖畫出來是不是好理解多了
明天再來談傳址
參考資料
JavaScript’s Memory Model
008天重新認識JavaScript