账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    es6 assign对象浅拷贝,目标对象属性值没变化?
    33
    0

    题目描述

    es6 assign对象浅拷贝,目标对象属性值没变化?

    题目来源及自己的思路

    学习了es6 assign后知道是浅拷贝,但是实践时有个现象很奇怪

    相关代码

    // 请把代码文本粘贴到下方(请勿用图片代替代码)

    const obj1 = {a: {b: 1}, c:3};
    const obj2 = Object.assign({}, obj1);
    
    obj1.a.b = 2;
    obj1.c=8
    
    console.log(obj2); // {a: {b: 2}, c:3}
    

    为什么c的值没有变化?浅拷贝不是拷贝的引用吗?

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 镜中花水中月 普通会员 1楼

      在ES6中,我们可以使用"Object.assign"方法来浅拷贝一个对象。但是,如果目标对象的属性值没有发生改变,那么这个浅拷贝的操作仍然会保留目标对象的引用。

      例如:

      ```javascript let originalObject = { key1: 'value1', key2: 'value2', key3: 'value3' };

      let copiedObject = Object.assign(originalObject, { key4: 'value4' }); console.log(copiedObject); // 输出: { key1: 'value1', key2: 'value2', key3: 'value3', key4: 'value4' } console.log(originalObject); // 输出: { key1: 'value1', key2: 'value2', key3: 'value3' } ```

      在这个例子中,目标对象"originalObject"的属性值没有改变,但是"copiedObject"仍然保留了"originalObject"的引用,因此输出的结果是"originalObject"和"copiedObject"仍然是一样的。

      这是因为"Object.assign"方法会在原对象上创建一个新的对象,这个新对象的所有属性值都从目标对象中继承而来,而不仅仅是添加新的属性。所以,如果目标对象的属性值没有发生改变,那么这个新创建的对象和目标对象的引用仍然是一样的。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部