您的位置:首页 > Web前端 > JavaScript

JS对象的深浅拷贝

2018-01-11 10:54 399 查看
深浅拷贝是针对不同类型的数据进行对应的操作。存储在栈中的数据,如String,Boolean,Number等类型数据使用浅拷贝即可,像object,array这种存储在堆中的数据,使用浅拷贝仅仅拷贝的是存储在栈中的地址名,并没有在堆中开辟新的内存,指向的还是同一个对象。


//浅拷贝适用于非引用类型的(字符数值等)拷贝
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)  //23
function deepcopy(obj){
var result={};
for (var attr in obj){

4000
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]="李雷"
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: