是否可以使用传播算子而不是创建新对象来更新对象?

时间:2019-07-19 06:26:19

标签: javascript ecmascript-6

var object1 = {
  a: 1,
  b: 3
};

Object.assing(object1, {b: 5});

这将使:

object1 = {
  a: 1,
  b: 5
}

问题是这可以通过传播运营商来实现... 它将返回新的Object而不是更新object1

var object2 = {...object1, b: 5}

与:

var object2 = Object.assign{{}, object1, {b: 5}}

这里

object2 = {
  a: 1,
  b: 5
}

但是

object1 {
  a: 1,
  b: 3
};

3 个答案:

答案 0 :(得分:2)

将展开的右侧分配给object1

var object1 = {
  a: 1,
  b: 3
};

object1 = { ...object1,b: 5};
console.log(object1);

答案 1 :(得分:2)

执行{...object1, b: 5}时,您正在使用对象文字符号创建一个新对象,该符号用于initialize内存中的新对象。

所以,当您这样做时:

var object2 = {...object1, b: 5}

与执行操作大致相同:

var object2 = {a: 1, b: 3, b: 5} // -> {a: 1, b: 5} -> creating a new object

因此,在此处创建新对象的不是扩展语法(...),而是对象文字({})。

因此,除非您愿意将object1重新分配给新对象引用,否则将无法仅使用传播语法就地修改object1

答案 2 :(得分:0)

使用传播运算符要求您创建一个新对象。但是PUT moive/_settings { "number_of_replicas": 2 } 将要编辑的对象作为第一个参数。它通常与空对象一起使用,但是您可以按以下方式使用它。

Object.assign