Есть ли разница, если я назначаю объект с помощью =
или ...
var o1 = {
a:1,
b:2
}
var o2 = o1; //say style 1
var o3 = {...o1} //say style 2
Имеет ли значение, пользуюсь ли я стилем 1 или стилем 2?
Да, есть разница
var o2 = o1; //say style 1
В style1 o2 будет указывать на o1 и менять что-либо в одном отражении изменений в другом. Так как 02 относится к одному объекту.
var o3 = {...o1} //say style 2
В style2 o3 есть новая переменная, которая будет иметь такое же значение, но не будет ссылаться на o1. при изменении o1 ничего не изменится в o3 и наоборот
Оператор Spread выполняет одноуровневое глубокое клонирование вашего объекта и, следовательно,
var o1 = {
a:1,
b:2
}
var o3 = {...o1}
будет возвращать новый объект, который не ссылается на o1
где, когда вы пишете var o3 = o1
вы назначаете ссылку с o1 на o3, и поэтому, если вы измените значение say o3.a = 2, оно изменится для исходный объект тоже, тогда как он не будет для первого случая
var o1 = {
a:1,
b:2
}
var o2 = {
a:1,
b:2
}
var o3 = {...o1}
var o4 = o2;
o3.a = 2;
console.log(o3, o1);
o4.a = 4;
console.log(o2, o4);
Имеет ли значение, пользуюсь ли я стилем 1 или стилем 2?
Да, ваш стиль1 и стиль2 по существу делают две разные вещи.
style1 назначает ссылку o1
на o2
, поэтому
o1 == o2 // true
style2, с другой стороны, присваивает значения o1
o3
и создается новый объект, поэтому
o1 == o3 // false