操作引用数类型时我们只要值,不要地址? var obj3={a:10,b:10};
var obj4=obj3;
console.log(obj4==obj3); //操作obj3的值时 obj4的值也被改变了
// 浅拷贝:把对象里的属性找出来,复制出来组成一个新的对象
function copy(obj){
var newObj={};
for(var attr in obj){
newObj[attr]=obj[attr];
}
return newObj;
}
// var obj5=copy(obj3);
// console.log(obj5);//{a:10,b:10}
// console.log(obj3);//{a:10,b:10}
// obj5.a=20;
// console.log(obj5);//{a: 20, b: 10}
// console.log(obj3);//{a:10,b:10}
// 浅拷贝:如果对象里某个属性值是个对象数据类型时,这个方法就不适用了
var obj={a:10,b:{a:10}}
var obj6=copy(obj);
console.log(obj6);
obj6.b.a=50;
console.log(obj6);
console.log(obj);
function deepCopy(obj){
if(typeof obj!='object'){
return obj;
}
if(obj instanceof Array){
var newObj=[];
}else{
var newObj={};
}
for(var attr in obj){
newObj[attr]=deepCopy(obj[attr]);
}
return newObj;
}
// var obj7={a:10,m:{a:20}}
// var obj8=deepCopy(obj7);
// obj8.m.a=80;
// console.log(obj8,obj7);
var obj9={a:10,m:[1,2,3,6],n:function(){}}
var obj10=deepCopy(obj9);
console.log(obj9,obj10);
obj10.n='a';
console.log(Object.prototype.toString.call(obj9.n))