Полный обзор важных сведений о методе назначения

Назначение метода Object.assign (как следует из названия) состоит в том, чтобы присвоить набор свойств из пункта назначения объекту-источнику.
Здесь действительно важно понимать всю картину, поэтому я хочу
подвести итоги. действительно важные моменты.

1. Источник должен отличаться от нулевого или неопределенного

let person = null; // or undefined

Object.assign(person, { name: 'John', surname: 'Doe' });
console.log(person);

// Object.assign(person, { name: 'John', surname: 'Doe' });
// TypeError: Cannot convert undefined or null to object

2. Источник должен быть объектом

Если исходное значение не является объектом, метод не выдаст никакой ошибки.

Object.assign("", { name: 'John', surname: 'Doe' });
// no errors in this case

3. Переопределение значения свойства

let person = {
    name: 'John'
};

Object.assign(person, { 
    name: 'Leonardo', 
    surname: 'Doe' 
});

// { name: 'Leonardo', surname: 'Doe' }

4. Несколько целевых объектов

let person = {};

Object.assign(person, { name: 'Leonardo', surname: 'Doe' }, { age: 44 });
console.log(person);

// { name: 'Leonardo', surname: 'Doe', age: 44 }

5. Установите для свойств значение null/undefined

let person = {
    name: 'John',
    surname: 'Doe',
    age: 44
};

Object.assign(person, { 
    name: 'Leonardo', 
    surname: 'Doe',
    age: null
});
console.log(person);

// { name: 'Leonardo', surname: 'Doe', age: null }

6. Поверхностное копирование

Однако в отношении Object.assign() следует помнить, что метод выполняет только частичное глубокое копирование объектов.

let person = {
    name: 'John',
    surname: 'Doe',
    age: 44,
    address: {
        city: 'LA'
    }
};

let personCopy = Object.assign({}, person);

personCopy.name = 'Leonardo';
personCopy.address.city = 'New York';
console.log('person: ', person);
console.log('personCopy: ', personCopy);

/*
person  {
  name: 'John',
  surname: 'Doe',
  age: 44,
  address: { city: 'New York' }
}
personCopy:  {
  name: 'Leonardo',
  surname: 'Doe',
  age: 44,
  address: { city: 'New York' }
}
*/

Спасибо за прочтение.

Если вам нравятся такие истории и вы хотите продолжать читать мои истории, рассмотрите возможность стать участником среды и моим подписчиком. Это стоит 5 долларов США в месяц и дает вам неограниченный доступ к контенту Medium.

Больше контента на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.

Хотите повысить узнаваемость и принятие вашего технологического стартапа? Посмотрите Цирк.