Object.assign(target,sources),es6新增方法可以实现浅拷贝。
<script>
var obj = {
id: 1,
name: 'CurryCoder',
msg: { // 更深层次的对象
age: 18,
address: 'earth'
},
color: ['pink', 'red']
};
// 浅拷贝
var o = {};
for (var k in obj) {
o[k] = obj[k]; // 浅拷贝只拷贝一层,更深层次对象级别的只拷贝引用。如只拷贝obj中msg的引用
}
console.log(o);
o.msg.age = 30;
console.log(obj);
console.log('-------以下是ES6新增的浅拷贝方法--------');
Object.assign(o, obj);
console.log(o);
o.msg.age = 60;
console.log(obj);
// 深拷贝
var oldobj = {
id: 1,
name: 'CurryCoder',
msg: { // 更深层次的对象
age: 18,
address: 'earth'
},
color: ['pink', 'red']
};
var res = {};
function deepCopy(target, sources) {
for (var k in sources) {
// 判断sources[k]属于哪种数据类型
var item = sources[k];
// 判断是否是数组
if (item instanceof Array) {
target[k] = [];
deepCopy(target[k], item);
// 判断是否是对象
} else if (item instanceof Object) {
target[k] = {};
deepCopy(target[k], item);
// 判断是否是简单数据类型
} else {
target[k] = item;
}
}
}
console.log('------深拷贝-------');
deepCopy(res, oldobj);
console.log(res);
res.msg.age = 44;
console.log(oldobj);
</script>