【问题标题】:Update object with destructuring // reference使用解构更新对象 // 引用
【发布时间】:2021-06-26 00:15:29
【问题描述】:

我想用解构更新这个对象(newBook)

let newBook ={
   bookId:book._id,
   favorite:false,
}
let {favorite} = newBook
favorite = true

favorite 需要作为参考 newBook.favorite

我知道我们可以像那样更新原始对象

let b = newBook
b.favorite = true

但是解构不起作用,有什么想法吗?

【问题讨论】:

  • let {favorite} = newBook 等价于let favorite = newBook.favorite;。它不会在变量和对象之间创建任何链接。
  • 解构赋值与Object属性赋值不同。
  • JavaScript 没有属性引用。
  • @StackSlave 无法创建作为对象属性别名的变量,因此当您执行 variable = something; 时,它会修改属性。

标签: javascript node.js arrays json object


【解决方案1】:

重新分配变量本身不会有任何副作用(除了极不寻常的情况,例如 arguments 和导出的 ES6 模块绑定)。如果你有

someIdentifier = someExpression

仅此行不会更改代码的任何其他内容,除非稍后使用 someIdentifier。

如果你想更新原始对象,唯一真正的方法是分配给对象的属性,就像你正在做的那样

b.favorite = true

或

newBook.favorite = true

这实际上与解构无关。将对象的属性分配给新变量不会将父对象的引用传递给新变量。

【讨论】:

  • 好吧,我明白了,但我有这样的代码 let newBook = {person:[{name:'agus'},{name:'gus'}]} 在解构时让 {person}变量保留引用,我可以修改原始对象 person[0].name = 'gus'
  • 那是因为在那里,您不是在重新分配 标识符,而是在改变 对象的属性。 person[0].name 不是独立标识符 - person 指的是一个对象,因此分配给 person.<anyProperty> 会改变 person 对象。
  • 好吧,我想我明白了,但不是很多
猜你喜欢
  • 1970-01-01
  • 2011-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-31
  • 2021-04-10
  • 2015-07-25
  • 1970-01-01
相关资源
最近更新 更多