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

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

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    node Object.assign 疑问?
    54
    0
      const userInfo = await userModel.findOne({_id:user_id});//这里查询结果是{a:1}
      const siginDay = await Sigin.findOne({_id:user_id},//这里查询结果是{b:1}
      let mergeObj = Object.assign(siginDay,userInfo);
      console.log(userInfo,siginDay,mergeObj)

    代码如上:
    Object.assign为浅拷贝,我打把上面结果合并一个对象,可以发现结果不对;
    合并的结果只会出现Object.assign 最后一对象的值,而且userInfo,siginDay值也变了;这是什么原因呢。
    演示如下:
    如果Object.assign(siginDay,userInfo); 结果是{a:1}没有{b:1},而且userInfo,siginDay这两个的值也变成{a:1};反之,Object.assign(userInfo,siginDay);结果只有{b:1};
    可是在node控制台运行Object.assign({a:1},{b:1})却能得到我要的结果{b:1,a:1}
    求大神指导。

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • 文坛小学生 普通会员 1楼

      Object.assign 是一个 JavaScript 中的 API,它用于合并两个或更多对象的属性值。

      然而,如果你有以下代码片段:

      ```javascript let obj1 = {a: 1}; let obj2 = {b: 2}; let obj3 = {c: 3}; let obj4 = {d: 4};

      let obj5 = Object.assign({}, obj1, obj2, obj3, obj4); ```

      这个代码片段将会创建一个新的对象 obj5,它将合并 obj1obj2obj3obj4 的属性值。这将得到一个新的对象,其中包含 obj1obj2obj3obj4 的属性值的组合。

      但是,如果你有以下代码片段:

      ```javascript let obj1 = {a: 1}; let obj2 = {b: 2}; let obj3 = {c: 3}; let obj4 = {d: 4};

      let obj5 = {a: 5};

      let obj6 = Object.assign({}, obj1, obj2, obj3, obj4, obj5); ```

      这个代码片段将会创建一个新的对象 obj6,它将合并 obj1obj2obj3obj4obj5 的属性值。这将得到一个新的对象,其中包含 obj1obj2obj3obj4obj5 的属性值的组合,但是 obj5 的属性值已经被覆盖了。

      所以,Object.assign 的作用并不是合并多个对象,而是合并多个对象的属性值。如果只有一个对象需要被合并,那么这个对象的属性值就会被覆盖。

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