Что выведет код Junior Объекты и массивы обновлено

Порядок аргументов Object.assign

Вопрос

Что выведет код? По строке на каждый вывод.

const obj1 = { a: 10, b: 15, c: 18 };
const obj2 = Object.assign({ c: 11, d: 12 }, obj1);
console.log(obj2.c, obj2.d);
console.log(JSON.stringify(Object.keys(obj2)));

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: 18 12, ["c","d","a","b"]. Почему так Object.assign пишет в первый аргумент, и последующие источники затирают совпадающие ключи.

Что выведет

18 12
["c","d","a","b"]

Разбор

Почему так

Object.assign пишет в первый аргумент, и последующие источники затирают совпадающие ключи. Поэтому c берётся из obj1, а d остаётся из цели. Порядок ключей: сначала те, что были в цели, потом новые - важно для сериализации и для снапшот-тестов.

Вывод

18 12
["c","d","a","b"]

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.