Javascript 更改一个或多个项目时复制到新对象的方法

Javascript 更改一个或多个项目时复制到新对象的方法,javascript,Javascript,我有一个目标: const obj = { name: "foo", other: "something" } 基于我的对象创建一个新对象(浅层副本),我将使用,然后在我的新对象上更改名称: const newObj = {...obj} newObj.name = "bar"; 但最近我遇到了同样起作用的语法: const newObj = { ...obj, name: "bar" } 这是如何工作的,它叫什么 您指定的两种方法是等效的。在第二种方法中 cons

我有一个目标:

const obj = {
  name: "foo",
  other: "something"
}    
基于我的对象创建一个新对象(浅层副本),我将使用,然后在我的新对象上更改
名称

const newObj =  {...obj}
newObj.name = "bar";
但最近我遇到了同样起作用的语法:

const newObj = {
  ...obj, name: "bar"
} 

这是如何工作的,它叫什么

您指定的两种方法是等效的。在第二种方法中

const newObj = {
  ...obj, name: "bar"
} 
它使用
key=name
value=“bar”
创建一个键-值对,因为一个键不能有多个值(如果不是数组)。它超过了先前的值。第二种方法中的代码相当于

const newobj = {
  name: "foo",
  other: "something",
  name: "bar"
}    

这就是工作原理,它允许在需要零个或多个参数(用于函数调用)或元素(用于数组文本)的地方展开iterable。

这解释了它的作用。我希望有帮助。

除了创建浅拷贝,spread还允许合并对象。后者将取代前者。例如:

const obj = { name: 'jane', age: 22 }
const merged = { ...obj, age: 21 } // { name: 'jane', age: 21 }

const obj = { name: 'jane', age: 22 }
const merged = { ...obj, hasDog: true } // { name: 'jane', age: 22, hasDog: true }

const obj = { name: 'jane', age: 22 }
const obj2 = { age: 19, hasDog: true }
const merged = { ...obj, ...obj2 } // { name: 'jane', age: 19, hasDog: true }

a property…?它首先复制obj的所有属性,然后覆盖名称property是否有文本而不是图像?很难找到。而且不可复制。这是链接