浅拷贝
浅拷贝只能拷贝一层,更深层次对象级别拷贝的只能拷贝引用路径,将原来的变量做修改后,浅拷贝的值也会随着改变
var obj = {
id:1,
name:'andy',
msg:{
age:18
}
}
var o = {};
// for(var k in obj){
// // k是属性名 obj[k] 属性值
// o[k] = obj[k]
// }
// console.log(o);
// o.msg = 20;
console.log('----------------------');
Object.assign(o,obj);
console.log(o);
o.msg.age = 20;
console.log(obj);
深拷贝
深拷贝拷贝多层,每一级别的数据都会拷贝
var obj = {
id:1,
name:'andy',
msg:{
age:18
}
}
var o= {};
function deeCopy(newobj,olobj){
//遍历循环旧数据
for(var k in olobj){
//获取我们的属性值olobj[k] 给到item
var item = olobj[k]
//判断数据类型为
if(item instanceof Array){
newobj[k] = item;
deeCopy(newobj[k],item)
}else if(item instanceof Object){
newobj[k] = item;
deeCopy(newobj[k],item)
}else{
newobj[k] = item;
}
}
}
deepCopy(o,obj);
console.log(o);
// console.log(arr instanceof Object);//返回的是true 说明arr也是属于object 不所以不能先执行object
// o.msg.age = 20; //改变msg中age的值 为20
// console.log(obj);//打印obj结果 发现obj里面的数值没有发生改变