js深克隆和浅克隆同时存在引发的问题?

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);

浅克隆和深克隆单独执行,结果都正常,一起执行的话,输出如下:https://img.mukewang.com/5c98480d0001ab5d08000456.jpg

期待浅克隆输出true, 深克隆输出false, 期待给出你的答案


繁花不似锦
浏览 1071回答 2
2回答

手掌心

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);

慕少森

因为 Object.assign{target, source} 第一个参数为目标对象,会改变对象中的值的。因此第二次执行 Object.assign 其实是朝同一个 target 上拷贝。不信你试试执行一下:console.log(cloneObject === deepObject);看一下是不是返回的 true。
打开App,查看更多内容
随时随地看视频慕课网APP