Оператор распространения {...}
позволяет расширять итерации.Это означает, что те типы данных, которые могут быть определены в виде пар key-value
, могут быть расширены.С точки зрения Object
мы называем пару ключ-значение как свойство объекта и его значение, тогда как с точки зрения arrays
мы можем рассматривать индекс как ключ, а элемент массива - как его значение.
let obj = { a: 4, b: 1};
let obj2 = { ...obj, c: 2, d: 4}; // {a: 4, b: 1, c: 2, d: 4}
let arr1 = ['1', '2'];
let obj3 = { ...arr1, ...['3']}; // {0: "3", 1: "2"}
В терминах массива, поскольку он принимает индекс в качестве ключа, здесь он заменяет элемент '1' из arr1
на '3', поскольку оба они имеют одинаковый индекс в другом массиве.
При слишком расширенных строках оператор возвращает непустой объект.Поскольку строка является массивом символов, она обрабатывает строку как массив.
let obj4 = {...'hi',...'hello'} // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'} // {0: "x" }
Но с другими примитивными типами данных она возвращает пустой объект
с числами
let obj6 = { ...0.0, ...55} // {}
с логическим значением
let obj7 = { ...true, ...false} // {}
В заключение, те типы данных, которые могут обрабатываться в виде пар ключ-значение при использовании с оператором распространения {...}
, возвращают непустой объект, в противном случае он возвращает пустой объект {}