基本类型(字符串,数字,布尔值,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