в чем разница между object spread и object assign в javascript при работе с дефолтными значениями

Аватар пользователя Ivan Gagarinov
Ivan Gagarinov
27 ноября 2024

Есть несколько способов копирования объектов и добавления/изменения их свойств. Два из наиболее часто используемых механизма для этого — 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, если ключи совпадают. Однако здесь нужно указать пустой объект в качестве первого аргумента, чтобы создать новый объект, в противном случае изменения будут применены к найденному объекту.

0 0

Есть что добавить? Зарегистрируйтесь

или войдите в аккаунт

Отправляя форму, вы принимаете «Соглашение об обработке персональных данных» и условия «Оферты», а также соглашаетесь с «Условиями использования»

Курсы по программированию в Хекслете

Программирование

Веб-разработка

Разработка, верстка и деплой сайтов и веб-приложений, трудоустройство для разработчиков

Frontend-разработка

Разработка внешнего интерфейса сайтов и веб-приложений и верстка

Создание сайтов

Разработка сайтов и веб-приложений на JS, Python, Java, PHP и Ruby on Rails

Backend-разработка

Разработка серверной части сайтов и веб-приложений

Тестирование

Ручное тестирование и автоматизированное тестирование на JS, Python, Java и PHP

Аналитика данных

Сбор, анализ и интерпретация данных на Python

Интенсивные курсы

Интенсивное обучение для продолжающих

DevOps

Автоматизация настройки локального окружения и серверов, развертывания и деплоя

Математика для программистов

Обучение разделам математики, которые будут полезны при изучении программирования

JavaScript

Разработка сайтов и веб-приложений и автоматизированное тестирование на JS

Тест-драйв

Python

Веб-разработка, автоматическое тестирование и аналитика данных на Python

Java

Веб-разработка и автоматическое тестирование на Java

PHP

Веб-разработка и автоматическое тестирование на PHP

Ruby

Разработка сайтов и веб-приложений на Ruby on Rails

Go

Курсы по веб-разработке на языке Go

Верстка

HTML

Современная верстка с помощью HTML и CSS

SQL

Проектирование базы данных, выполнение SQL-запросов и изучение реляционных СУБД

Git

Система управления версиями Git, регулярные выражения и основы командой строки

Бесплатные курсы

Бесплатные курсы по тестированию, дата-аналитике, верстке, программированию на Python, Java, PHP и JavaScript.

Фреймворки

Базы данных