Для эталонного объекта отдых / разворот завершается в ECMAScript 2018 как этап 4. Предложение можно найти здесь .
В большинстве случаев сброс и распространение объектов работают одинаково, ключевое отличие состоит в том, что распространение определяет свойства, а Object.assign () устанавливает их . Это означает, что Object.assign () запускает сеттеры.
Стоит помнить, что, кроме этого, объект rest / spread 1: 1 отображается на Object.assign () и действует иначе, чем массив (повторяемый). Например, при расширении массива распространяются нулевые значения. Однако, используя нулевые значения, распространяемые по объектам, они просто ничего не значат.
Пример массива (Iterable) Spread
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
Пример распространения объекта
const x = null;
const y = {a: 1, b: 2};
const z = {...x, ...y};
console.log(z); //{a: 1, b: 2}
Это согласуется с тем, как будет работать Object.assign (), и оба молча исключают нулевое значение без ошибок.
const x = null;
const y = {a: 1, b: 2};
const z = Object.assign({}, x, y);
console.log(z); //{a: 1, b: 2}