Object.assign javascript
:) Вот я создаю 3 объекта:
let user = { who: "God", age: 13759613215 };
let obj1 = { someKey1: "dsvygsd" };
let obj2 = { someKey2: "sdvtglmha" };
Копирую свойства obj1 и obj2 и user.
Object.assign( user, obj1, obj2 );
Вызываю ключи через alert.
for (let key in user) {
alert(key);
}
Ну и всплывающее окно выводит их по порядку: who, age, someKey1, someKey2.
И вот ставлю я значит скобки квадратные тут
Object.assign( user, [obj1, obj2] );
И теперь цикл
for (let key in user) {
alert(key);
}
Выдает мне: 0, 1, who, age. Почему там 0 и 1?
Ответы (4 шт):
Потому что [obj1, obj2] - это массив с индексами 0 и 1.
let obj1 = { someKey1: "dsvygsd" };
let obj2 = { someKey2: "sdvtglmha" };
for (let key in [obj1, obj2]) {
console.log(typeof key, key);
}
Согласно справке: первым передаваемым параметром, является целевой объект, куда будут добавляться свойства, все остальные параметры - это объекты, чьи свойства будут добавляться.
В случае
Object.assign( user, obj1, obj2 );
Происходит передача трех параметров:
- user - целевой объект
- obj1 - первый источник
- obj2 - второй источник
В случае
Object.assign( user, [obj1, obj2] );
Происходит передача двух параметров:
- user - целевой объект
- [obj1, obj2] - первый источник
Так как источником является массив - в целевой объект добавляются его свойства 0 и 1, соответствующие каждому элементу массива.
Массивы в javascript - это тоже объекты, ключами которых являются числа, т.е. запись [obj1, obj2] почти эквивалентна записи {"0": obj1, "1": obj2}, и когда вы пытаетесь объединить объект user и массив [obj1, obj2], то фактически вы пытаетесь объединить user и другой объект с ключами "0" и "1"
function shallowCopy(obj) { const res = Object.assign({}, obj); return res }
const myObj = { one: 1, two: 2, three: 3 };
const myObjCopy = shallowCopy(myObj);
console.log(myObjCopy === myObj); // false