Вчера я писал об использовании оператора распространения (…) в массивах javascript. Сегодня давайте кратко поговорим об объектах.
На самом деле он очень похож, но замечательно работает с объединяемыми объектами. Вот что я имею в виду. Объединение объектов работает аналогично массивам:
> const metasyntactic1 = { foo: "bar", baz: "qux", } > const metasyntactic2 = { quux: "quuz", corge: "grault", } > {...metasyntactic1, ...metasyntactic2} { foo: "bar", baz: "qux", quux: "quuz", corge: "grault" }
Но что происходит, когда возникает конфликт имен?
> const metasyntactic1 = { foo: "bar", baz: "qux", } > const metasyntactic2 = { baz: "quuz", corge: "grault", } > {...metasyntactic1, ...metasyntactic2} { foo: "bar", baz: "quuz", corge: "grault" }
Итак, последние объекты перезаписывают более ранние. Прохладный.
Но предположим, что мы хотим создать объект со всеми свойствами, кроме одного.
> const beercan = { foo: "bar", baz: "quuz", corge: "grault", } > {...beercan, foo: "bud"} { foo: "bud", baz: "quuz", corge: "grault", }
Это создает копию пивной банки (сама пивная банка не изменяется), но с заменой переменной «foo».
Как и в случае с массивами, вы можете иметь столько элементов в этих конструкторах, сколько захотите.
{...foo, ...bar, bob: "onion", joe: "orange", ...baz}