深拷贝:重新开辟一片空间用来存储新对象,与源对象不共用一块内存空间
var oldObj = {
name: '张三',
age: 21,
gender: '男',
hobby: ['篮球', '小说', '游戏', '摄影', '旅游', {
dream: ['书店', '书', '情', '钱']
}]
};
1、递归深拷贝对象
function deepCopy(newObj, oldObj) {
for (var k in oldObj) {
// k 属性名/键名
// oldObj[k] 属性值/键值
// 先获取属性值
var value = oldObj[k];
if (value instanceof Array) {
newObj[k] = [];
deepCopy(newObj[k], value)
} else if (value instanceof Object) {
newObj[k] = {};
deepCopy(newObj[k], value);
} else {
newObj[k] = value;
}
}
return newObj;
};
deepCopy(newObj, oldObj);
oldObj.name = '春儿';
console.log(oldObj);
console.log(newObj);
2、JSON.parse(JSON.stringify(oldObj));
JSON.stringify()将对象转换为json字符串格式
JSON.parse()将字符串转换为json对象格式
var newObj = JSON.parse(JSON.stringify(oldObj));
oldObj.name = '春儿';
console.log(oldObj);
console.log(newObj);