в чем разница между object spread и object assign в javascript при работе с дефолтными значениями
Есть несколько способов копирования объектов и добавления/изменения их свойств. Два из наиболее часто используемых механизма для этого — spread-оператор и метод Object.assign()
. Оба способа могут использоваться для создания новых объектов и изменения их свойств, но у них есть важные различия, особенно в контексте задания дефолтных значений:
Spread-оператор, позволяет "распространять" свойства одного объекта в новый объект.
Пример:
const defaults = { a: 1, b: 2 };
const options = { b: 3 };
const config = { ...defaults, ...options };
console.log(config); // { a: 1, b: 3 }
В этом примере свойства из options
"распространяются" в новый объект config
, при этом если там совпадают ключи (свойства), то значения из более позднего объекта (в данном случае options
) перезаписывают значения из предыдущего (в данном случае defaults
).
Метод Object.assign()
принимает целевой объект и один или более источников, откуда он будет копировать собственные перечисляемые свойства. Этот метод также может использоваться для создания нового объекта, но синтаксис несколько отличается.
const defaults = { a: 1, b: 2 };
const options = { b: 3 };
const config = Object.assign({}, defaults, options);
console.log(config); // { a: 1, b: 3 }
Как и в случае с оператором распространения, свойства из options
перезаписывают свойства из defaults
, если ключи совпадают. Однако здесь нужно указать пустой объект в качестве первого аргумента, чтобы создать новый объект, в противном случае изменения будут применены к найденному объекту.