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}
求大神指导。
siginDay
对象被改写,包含原siginDay,userInfog合集,存在同名属性时,后面的覆盖前面的=============
补充什么是自有属性,什么叫可枚举
一个对象属性如果是从原型中带来的,那它叫继承属性;
一个对象属性如果是不是从原型中带来的,那它叫自有属性;
一个对象属性可以通过
Object.defineProperty
方式定义一个对象的属性,可以设置属性是否可枚举,是否可配置,是否可写等属性.平常我们通过对象字面量的方式定义的对象属性是可枚举,可配置,非只读的