0%

JavaScript 核心 (24) - 物件 - 物件的參考特性

純值傳值 Call by value

純值就是 JavaScript 的7個原始型別,以下用 String 當賦值:

1
2
3
4
5
var a = 'Cloud';
var b = a;
console.log(a, b); /* Cloud, Cloud */
b = 'Test';
console.log(a, b); /* Cloud, Test */

由此可知,a、b兩者互不相干

物件傳參考 Call by sharing

接下來用物件試試,看與上面有何差異吧。

1
2
3
4
5
6
7
8
9
var a = {
name: 'Cloud',
}

var b = a;

b.name = 'Test';

console.log(a.name, b.name); /* Test, Test */

結果 a、b 都為 Test,也就是說 a、b 兩者是相同的

1
console.log(a === b); /* true */

之所以兩者相同是因為 物件傳參考 特性
那什麼是參考?
可以理解成是宣告物件時(a)建立記憶體空間,而此變數是指向記憶體空間,而不是
而後新變數(b)又用 a 當變數宣告,此時指向的依舊是物件。
用以下圖片更好理解:
物件傳參考

參考資料

六角學院 - JavaScript 核心篇
JavaScript 核心觀念(26)-物件-物件的參考特性