javascript - 对象传播的顺序和其他属性起什么作用?
问题描述
考虑一个对象data
。
data = {
draggingTaskId: '',
entities: {},
selectedTaskIds: [],
}
我以两种不同的顺序使用解构赋值,但两次的行为都不同。对象解构分配中的顺序是否重要?
console.log('----------------------------------');
console.log({
...data,
draggingTaskId: "task-0",
});
console.log({
draggingTaskId: "task-0",
...data,
});
console.log('----------------------------------');
输出:
--------------------------------
draggingTaskId: "task-0"
entities: {}
selectedTaskIds: []
draggingTaskId: ""
entities: {}
selectedTaskIds: []
-----------------------------------
在第二种情况下, thedraggingTaskId
以空字符串的形式出现。
解决方案
顺序确实是相关的 - 如果它们具有相同的键,则稍后出现的项目会覆盖更早出现的项目。
console.log({
...data,
draggingTaskId: 'task-0', // this overrides the value of data.draggingTaskId = '', resulting in 'task-0'
})
console.log({
draggingTaskId: 'task-0', // In this case this key is overridden by the value of data.draggingTaskId = '', resulting in ''
...data,
})
您可能会发现这很有帮助 - https://dmitripavlutin.com/object-rest-spread-properties-javascript/#21-object-spread-rule-latter-property-wins
推荐阅读
- python - 从flask-admin的模型视图中摆脱/隐藏/删除“选择”视图
- amazon-ec2 - 每 2 或 3 天通过 Ec2 1/2 检查
- javascript - SyntaxError:预期的表达式,在字符 2 处得到 '}'
- python - Tkinter 中的 'root.mainloop()' 导致 AttributeError
- typescript - 打字稿:“数字”类型的参数不可分配给“字符串”类型的参数
- php - PHP-Websocket:socket_recv() 和 socket_getpeername() 的问题
- eclipse - 无法在 Eclipse Photon / Eclipse IDE 中安装 Glassfish 工具
- java - While 循环出现 NoSuchElementException 错误
- python - 如果您要求整数并且没有得到整数,是否有例外?
- android - 在 Android 中从 Fragment 打开 Activity