//深拷贝
<script>
var obj = {
name: '岳云鹏',
age: 30,
hobby: ['卖萌', '唱歌', '燕子'],
address: {
city: '北京',
name: '德云社'
}
};
var copyObj = {};
//深拷贝:拷贝出来的目标对象和源目标对象,互不影响,修改其中的一个值,另外的对象不受影响。
//实现深拷贝,取复杂类型和数组里面的值,放在新的变量中
function deepCopy (newObj, oldObj) {
for (var key in oldObj) {
//获取对象的每项属性或方法的值
var item = oldObj[key];
//如果是数组
if (item instanceof Array) {
//就遍历,逐个赋值
newObj[key] = [];
deepCopy(newObj[key], item);
} else if (item instanceof Object) {
//如果是复杂对象类型
newObj[key] = {};
deepCopy(newObj[key], item);
} else {
//如果是简单类型
newObj[key] = item;
}
}
};
deepCopy(copyObj, obj);
// 修改拷贝后的对象,如果不改变被拷贝的对象,就深拷贝成功
copyObj.hobby[0] = "端菜";
copyObj.address.name = "河南濮阳";
console.log(copyObj);
console.log(obj);
</script>
//JSON实现深拷贝案例
<script>
var obj = {
name: '岳云鹏',
age: 30,
hobby: ['卖萌', '唱歌', '燕子'],
address: {
city: '北京',
name: '德云社'
}
};
var copyObj = {};
//将对象转成JSON字符串
// console.log(JSON.stringify(obj));
//将JSON转换为对象
// console.log(JSON.parse('{"name":"岳云鹏","age":20,"hobby":["卖萌", "唱歌", "燕子"],"addres":{"city":"北京","name":"德云社"}}'));
//进行深拷贝
copyObj = JSON.parse(JSON.stringify(obj));
copyObj.hobby[0] = "读书";
copyObj.address.name = "天桥";
console.log(copyObj);
console.log(obj);
</script>
【深拷贝与JSON实现深拷贝】
最新推荐文章于 2023-06-19 14:13:07 发布