浅拷贝
浅拷贝只是拷贝一层,更深层次对象级别的只拷贝引用; 它只拷贝内存地址,只要有一个对象改变了,另外一个对象也会跟着改变。
1.利用for循环遍历赋值
代码语言:javascript复制 var obj = {
name:'dample',
msg:{
age:22
}
}
var a ={}
for(var k in obj){
//k是属性名
a[k] = obj[k]
}
console.log(a);//20
a.age = 20;
console.log(obj);//20
2.ES6新增方法Object.assign()
代码语言:javascript复制 var obj = {
name:'dample',
msg:{
age:22
}
}
var a ={}
Object.assign(a,obj);
console.log(a);//20
a.msg.age = 20;
console.log(obj);//20
深拷贝
深拷贝拷贝多层,每一级别的数据都会拷贝。
代码语言:javascript复制 var obj = {
name:'dample',
msg:{
age:22
},
color:['pink','red']
};
var a = {};
//封装函数,还利用了递归的方法
function deepCopy(newObj,oldObj){
for(var k in oldObj){
//1.获取属性值oldObj[k]
var item = oldObj[k];
//2.判断这个值是否是数组
if(item instanceof Array){
newObj[k] = [];
deepCopy(newObj[k],item)
}else if(item instanceof Object){
//3.判断这个值是否是对象
newObj[k] = {};
deepCopy(newObj[k],item)
}else{
//4.属于简单数据类型
newObj[k] =item;
}
}
}
deepCopy(a,obj)
console.log(a);
a.msg.age = 20;
console.log(obj);
打印结果如图所示: