浅拷贝与深拷贝的区别:
- 浅拷贝只是拷贝一层, 更深层次对象级别的只拷贝引用.
- 深拷贝拷贝多层, 每一级别的数据都会拷贝.
1.浅拷贝
var obj = {
id: 1,
name: 'andy',
msg: {
age: 18
}
};
var o = {};
for (var key in obj) {
// key 是属性名 obj[key]是属性值
o[key] = obj[key];
}
console.log(o);
// 还可以使用 Object.assign(target, source)方法实现浅拷贝
Object.assign(o, obj);
console.log(o);
2.深拷贝
var obj = {
id: 1,
name: 'andy',
msg: {
age: 18
},
color: ['pink', 'red']
};
var o = {};
// 封装函数
function deepCopy(newobj, oldobj) {
for (var key in oldobj) {
// 判断我们的属性值属于那种数据类型
// 1. 获取属性值 oldobj[key]
var item = oldobj[key];
// 2. 判断这个值是否是数组(数组必须先与对象,由于数组Array也是一种对象类型)
if (item instanceof Array) {
newobj[key] = [];
deepCopy(newobj[key], item)
} else if (item instanceof Object) {
// 3. 判断这个值是否是对象
newobj[key] = {};
deepCopy(newobj[key], item)
} else {
// 4. 属于简单数据类型
newobj[key] = item;
}
}
}
deepCopy(o, obj);
console.log(o);