为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

繁花不似锦 2019-03-25 11:16:00
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);


查看完整回答
反对 回复 2019-03-25
?
慕少森

TA贡献2019条经验 获得超9个赞

因为 Object.assign{target, source} 第一个参数为目标对象,会改变对象中的值的。

因此第二次执行 Object.assign 其实是朝同一个 target 上拷贝。

不信你试试执行一下:

console.log(cloneObject === deepObject);

看一下是不是返回的 true。


查看完整回答
反对 回复 2019-03-25
  • 2 回答
  • 0 关注
  • 1039 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信