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 methodlet 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, 期待给出你的答案
2 回答
手掌心
TA贡献1942条经验 获得超3个赞
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);
慕少森
TA贡献2019条经验 获得超9个赞
因为 Object.assign{target, source} 第一个参数为目标对象,会改变对象中的值的。
因此第二次执行 Object.assign 其实是朝同一个 target 上拷贝。
不信你试试执行一下:
console.log(cloneObject === deepObject);
看一下是不是返回的 true。
添加回答
举报
0/150
提交
取消