基本類型(字符串,數字,布爾值,null,undefined):賦值的時候只是值的複製。
var a=5;
var b=a;
b+=5;
alert(b); //10
alert(a); //5
對象類型和函數都是引用的關係,共用地址。
var a=[1,2,3];
var b=a;
b.push(4);
alert(b); //1,2,3,4
alert(a); //1,2,3,4
另一種情況:
var a=[1,2,3];
var b=a; //b和a共用一個地址
b=[1,2,3,4]; //b創建了新的地址
b.push(5);
alert(b); //1,2,3,4,5
alert(a); //1,2,3
var a=1;
var b=1;
alert(a==b); //true 基本類型:值相同則爲true
var a=[1,2,3];
var b=[1,2,3];
alert(a==b); //false 對象類型:值相同,但地址不同
var a=[1,2,3];
var b=a;
alert(a==b); //true 對象類型:值相同,地址相同
淺拷貝(淺克隆):
var obj1={
a:10 //屬性值爲基本類型
}
function copy(obj){
var newobj={};
for (var attr in obj) {
newobj[attr]=obj[attr];
}
return newobj;
}
var obj2=copy(obj1);
obj2.a=20;
alert(obj1.a); //10
深拷貝:
var obj1={
a:{b:10} //屬性值可能爲一層也可以爲多層
}
function deepCopy(obj){ //利用遞歸的思想
if (typeof obj!= 'object') { //結束循環的條件
return obj;
}
var newobj={};
for (var attr in obj) {
newobj[attr]=deepCopy(obj[attr]); //對屬性值進行層層拷貝
}
return newobj;
}
var obj2=deepCopy(obj1);
obj2.a.b=20;
alert(obj1.a.b); //10