js深克隆和浅克隆同时存在引发的问题?
学习object.assign写的demo, 下面现象一直不得其解
相关代码
const target = {
a: 1,
b: 2
};
const source = {
c: {
deep: false
},
d: [1,2,3]
};
let cloneObject = Object.assign(target, source); // or {...source}
// deep clone method
let deepObject = Object.assign(target, JSON.parse(JSON.stringify(source)));
source.c.deep = true;
source.d[0] = 4;
console.log(cloneObject);
console.log(deepObject);
浅克隆和深克隆单独执行,结果都正常,一起执行的话,输出如下:
期待浅克隆输出true, 深克隆输出false, 期待给出你的答案
所以 let deepObject = Object.assign(target, JSON.parse(JSON.stringify(source))) 会把 target 值改变了,target.c 的指向也会跟着改变,不再指向 source.c 。