浅拷贝与深拷贝
一.浅拷贝
//浅拷贝
var obj = {
id: 20,
name: 'Tom',
age: 18,
msg: {
sex: '男'
}
};
var newObj = {};
//方法一:利用for in循环进行浅拷贝
// for (var k in obj) {
// newObj[k] = obj[k]
// }
//console.log(newObj);
//方法二:利用es6的新方法
Object.assign(newObj, obj);
console.log(newObj);
注意:由于是浅拷贝,所以对于msg方法而言,此时只是拷贝了其地址,如果修改了其信息,两者都会发生变化;简单点来说,就是假设B复制了A,当修改A时,如果B也跟着变了,说明这是浅拷贝,拿人手短,如果B没变,那就是深拷贝,自食其力。
二.深拷贝
var obj = { id: 20, name: 'Tom', age: 18, msg: { sex: '男' }, color: ['pink', 'red'] }; var o = {}; //封装函数 function deepCopy(newObj, oldObj) { for (var k in oldObj) { //判断属性值为哪种数据类型/获取属性值 var item = oldObj[k]; //判断这个属性值是否为数组 if (item instanceof Array) { newObj[k] = []; deepCopy(newObj[k], item) } else if (item instanceof Object) { //判断这个属性值是否为对象 newObj[k] = {}; deepCopy(newObj[k], item) } else { //属于简单数据类型 newObj[k] = item; } } }; deepCopy(o, obj); console.log(o);