复制对象后部分属性值存在但控制台打印显示undefined的问题求助
复制对象后部分属性值存在但控制台打印显示undefined的问题求助
我碰到一个挺奇怪的问题:我复制了一个对象之后,里面有两个属性在控制台打印整个对象时显示undefined,但直接访问这两个属性(比如modelForm.action)却能得到正确的值,实在搞不懂哪里出问题了。
我的代码是这样的:
this.modelForm = Object.assign({}, this.formSelected) console.log(this.modelForm) console.log(this.modelForm.action)
控制台的输出情况:
第一个日志(打印整个对象):
action: undefined company_id: 1 created_at: "2022-12-19 19:13:21" deleted_at: null description: "ewef" html: null id: 7 name: "Form 3" status: undefined updated_at: "2022-12-19 19:45:34"
第二个日志(直接访问
action属性):
"default"
我自己琢磨了几个可能的方向,也给大家列出来参考:
- 这大概率是浏览器控制台的“引用延迟解析”特性搞的鬼:控制台打印对象时并没有立刻生成快照,而是保存了对象的引用,等你去查看的时候才读取最新状态。如果
action和status是在console.log执行之后才被赋值的,就会出现这种矛盾的情况。可以试试用JSON.stringify打印对象快照:console.log(JSON.stringify(this.modelForm)),看看这两个属性在打印瞬间的真实值。 - 检查下原对象
this.formSelected的属性定义:比如action和status是不是用了getter访问器?或者是异步加载、延迟赋值的属性?Object.assign浅拷贝的时候可能不会触发getter的取值逻辑,而直接访问时才会触发。 - 换一种对象复制方式试试,比如用展开运算符:
this.modelForm = {...this.formSelected},排除Object.assign的潜在问题,看看结果是否一致。
备注:内容来源于stack exchange,提问作者Iago Alcântara
相关产品推荐
相关产品推荐

