Para o objeto de referência, o descanso / propagação é finalizado no ECMAScript 2018 como um estágio 4. A proposta pode ser encontrada aqui .
Na maioria das vezes, a redefinição e a propagação de objetos funcionam da mesma maneira, a principal diferença é que a propagação define propriedades, enquanto Object.assign () as define . Isso significa que Object.assign () aciona setters.
Vale lembrar que, além disso, o objeto rest / spread 1: 1 mapeia para Object.assign () e age de maneira diferente para o spread (iterável) da matriz. Por exemplo, ao espalhar uma matriz, valores nulos são espalhados. No entanto, ao usar objetos espalhados, os valores nulos são silenciosamente espalhados para nada.
Exemplo de propagação de matriz (iterável)
const x = [1, 2, null , 3];
const y = [...x, 4, 5];
const z = null;
console.log(y); // [1, 2, null, 3, 4, 5];
console.log([...z]); // TypeError
Exemplo de propagação de objeto
const x = null;
const y = {a: 1, b: 2};
const z = {...x, ...y};
console.log(z); //{a: 1, b: 2}
Isso é consistente com o funcionamento de Object.assign (), ambos excluem silenciosamente o valor nulo sem erro.
const x = null;
const y = {a: 1, b: 2};
const z = Object.assign({}, x, y);
console.log(z); //{a: 1, b: 2}