test.js
var a = ;
var b = a;
console.log(a);
console.log(b);
b.name = 2;
console.log(a);
console.log(b);
var b = ;
console.log(a);
console.log(b);
執行 test.js 結果為:
解釋:a 是乙個物件,b 是對 a 的引用,即 a 和 b 指向同一塊記憶體,所以前兩個輸出一樣。當對 b 作修改時,即 a 和 b 指向同一塊記憶體位址的內容發生了改變,所以 a 也會體現出來,所以第三四個輸出一樣。當 b 被覆蓋時,b 指向了一塊新的記憶體,a 還是指向原來的記憶體,所以最後兩個輸出不一樣。
而在基本型別中就不會這個結果了:
//基本型別
var a = 1;
var b = a;
b = 2;
console.log(a) //1 值不隨b的改變而改變
之前看過大犀牛的書, 裡面好像講過, 基本型別占用空間少,而引用型別占用大,js為了節約空間,就把引用型別的值用乙個叫做指標的東西和變數連線起來, 也就是說改乙個其他的都會跟著改變,公用的意思. 大概意思是這個吧 物件和物件引用
每天都在變化,每天都在進步 基礎情況 a a new a a a 建立了個a 型別的引用a,此時指向null new a 在堆中建立了乙個類a的物件,返回其引用位址 將物件的位址給予引用 情景1a a new a 01 a b a 02 a null 03 此時b仍然有資料,因為 02 的時候,發生...
物件和物件引用
class vehicle 有了這個模板,就可以用它來建立物件 vehicle veh1 new vehicle 通常把這條語句的動作稱之為建立乙個物件,其實,它包含了四個動作。1 右邊的 new vehicle 是以vehicle類為模板,在堆空間裡建立乙個vehicle類物件 也簡稱為vehic...
JS物件的引用,物件的拷貝
除了基本型別跟null,物件之間的賦值,只是將位址指向同乙個,而不是真正意義上的拷貝 將乙個物件賦值給另外乙個物件。var a 1,2,3 var b a b.push 4 b中新增了乙個4 alert a a變成了 1,2,3,4 自定義物件 var obj var obj2 obj obj2.a...