除了基本型別跟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 = 20; //
obj2.a改變了,
alert(obj.a); //
20,obj的a跟著改變
這就是由於物件型別直接賦值,只是將引用指向同乙個位址,導致修改了obj會導致obj2也被修改
所以,我們需要封裝乙個函式,來對物件進行拷貝,通過for in 迴圈獲取基本型別,賦值每乙個基本型別,才能真正意義上的複製乙個物件
var obj = ;function copy(obj);
for ( var attr in
obj)
return
newobj;
}var obj2 =copy(obj);
obj2.a = 20
;alert(obj.a);
//10
這樣就解決了物件賦值的問題。
但是這裡存在隱患,如果obj中,a的值不是10,而是乙個物件,這樣就會導致在for in中,將a這個物件的引用賦值為新物件,導致存在物件引用的問題。
var obj = };function copy(obj);
for ( var attr in
obj)
return
newobj;
}var obj2 =copy(obj);
obj2.a.b = 20
;alert(obj.a.b);
//20
因此,由於這個copy物件只是對第一層進行拷貝,無法拷貝深層的物件,這個copy為淺拷貝,我們需要通過遞迴,來拷貝深層的物件。將copy改造成遞迴即可
var obj = };function deepcopy(obj)
var newobj ={};
for ( var attr in
obj)
return
newobj;
}var obj2 =deepcopy(obj);
obj2.a.b = 20
;alert(obj.a.b);
//10
所以,我們需要封裝乙個函式,來對物件進行拷貝,通過for in 迴圈獲取基本型別,賦值每乙個基本型別,才能真正意義上的複製乙個物件
var obj = ;function copy(obj);
for ( var attr in
obj)
return
newobj;
}var obj2 =copy(obj);
obj2.a = 20
;alert(obj.a);
//10
這樣就解決了物件賦值的問題。
但是這裡存在隱患,如果obj中,a的值不是10,而是乙個物件,這樣就會導致在for in中,將a這個物件的引用賦值為新物件,導致存在物件引用的問題。
var obj = };function copy(obj);
for ( var attr in
obj)
return
newobj;
}var obj2 =copy(obj);
obj2.a.b = 20
;alert(obj.a.b);
//20
因此,由於這個copy物件只是對第一層進行拷貝,無法拷貝深層的物件,這個copy為淺拷貝,我們需要通過遞迴,來拷貝深層的物件。將copy改造成遞迴即可
var obj = };function deepcopy(obj)
var newobj ={};
for ( var attr in
obj)
return
newobj;
}var obj2 =deepcopy(obj);
obj2.a.b = 20
;alert(obj.a.b);
//10
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...
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...
JavaScript物件的引用,物件的拷貝
除了基本型別跟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...