//浅拷贝适用于非引用类型的(字符数值等)拷贝
var obj1={
age:15,
boo:true,
arr:["小明","韩梅梅"]
}
var obj2=copy(obj1);
obj2.boo=false
obj2.arr[0]="李雷"console.log(obj2) //age:15, boo:false,arr["李雷","韩梅梅"]
console.log(obj1) //age:15, boo:true,arr["李雷","韩梅梅"]
function copy(obj){
var str={};
for (var attr in obj){
str[attr]=obj[attr]
}
return str
}
//深拷贝是对引用类型的拷贝,下面是对对象进行深拷贝var obj1={
people:{proper:{age:16,sex:"girl"}}
}
var obj2=deepcopy(obj1);
obj2.people.proper.age=23;
console.log(obj1.people.proper.age) //16
console.log(obj1.people.proper.age) //23functiondeepcopy(obj){var result={};
for (var attr in obj){
if(typeof obj[attr] == "object"){ //判断是不是object
result[attr]=deepcopy(obj[attr])
}else{
result[attr]=obj[attr]
}
}
return str
}
jQuery方式:
jQuery.extend第一个参数可以是布尔值,用来设置是否深度拷贝:
var obj1={
age:15,
boo:true,
arr:["小明","韩梅梅"]
}
var obj3=$.extend(true,{},obj1)
obj3.arr[0]="李雷"
深浅拷贝是针对不同类型的数据进行对应的操作。存储在栈中的数据,如String,Boolean,Number等类型数据使用浅拷贝即可,像object,array这种存储在堆中的数据,使用浅拷贝仅仅拷贝的是存储在栈中的地址名,并没有在堆中开辟新的内存,指向的还是同一个对象。//浅拷贝适用于非引用类型的(字符数值等)拷贝 var obj1={ age:15,