Определение
JavaScript ES6 представил оператор SPRECT, и он работал только для массивов. ES2018 расширяет оператор по распространению (…), чтобы он работает с собственными перечисленными свойствами объекта.
SPRECT Syntax (…) позволяет, такое, как выражение или строку массива или строку, которые должны быть расширены в местах, где ожидаются нулевые или новые аргументы (для вызовов функций) или элементов (для литералов на массиве) или выражение объекта, которое будет расширено в Ожидается, где ожидаются места, где нулевые или более пар клавиш (для объектных литералов) ожидаются.
Ссылка: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Spread_syntax
Я чувствую, что это определение трудно понять. Так что позвольте мне поставить другие слова, Оператор SPRECT принимает такое как массив и расширяет его в элементы.
Примеры
Множество
1. Слияние массивов
Без оператора распространения, используя Array.prototype .Concat (),
let array1 = [1, 2, 3]; let array2 = [4, 5, 6]; let newArray=array1.concat(array2); newArray; //-> [1, 2, 3, 4, 5, 6]
С распространением оператора,
let array1 = [1, 2, 3]; let array2 = [4, 5, 6]; let mergeArray = [...array1, ...array2]; mergedArray; //-> [1, 2, 3, 4, 5, 6]
2. Массив клона
В JavaScript массивы являются ссылочными типами («Pass by Review», он просто копирует адрес этого массива), поэтому вы не можете просто создать новую копию массива, используя =. Когда вы изменяете новый массив или оригинальный массив, он также изменит другой другой, например, пример ниже:
let original = [1, 2, 3]; let newArray = original; newArray[0]=5; newArray; //-> [5, 2, 3] original; //-> [5, 2, 3]
О нет, оба из них изменились. Давайте попробуем еще раз с разбросом оператора.
let original = [1, 2, 3]; let newArray = [...original]; newArray[0]=5; newArray; //-> [5, 2, 3] original; //-> [1, 2, 3]
Теперь оригинальный массив не повлиял, когда мы изменили NewArray, был изменен только NewArray.
3. Строка до массива
Использование оператора SPRECT в строку, он вернет массив отдельных подстрок (разделение на символы).
let st = 'hello'; let array = [...st]; array; //-> ['h', 'e', 'l', 'l', 'o']
4. Математика
Математический объект в JavaScript, массив не будет работать, но с оператором распространения это будет работать
let array = [1,2,3,10]; console.log(Math.max(array)); //->NaN console.log(Math.max(...array)); //->10
Ссылка: https://www.samanthaming.com/tidbits/92-6-use-cases-of-spread-with-aray/ https://www.geeksforgeeks.org/javascript-spread-operator/
Объект
Оператор по распространению (…) с объектами используется для создания копий существующих объектов с новыми или обновленными значениями или для создания копии объекта с большим количеством свойств.
скажем, у нас есть 3 объекта,
let user1 = { name: 'jean', age: 30 }; let user2 = { name: 'John', age: 20 }; let jean = { location: 'NY', hobby: 'coding' };
1. Объект клона
Использование Object.Assign ()
let clonedUser = Object.assign({}, user1); clonedUser; //-> {name: 'jean', age: 30 }
Используя распределительный оператор
let clonedUser = { ...user1 }; clonedUser; //-> {name: 'jean', age: 30 }
Оба они работают так же.
2. Объекты объединения (с разными свойствами)
Использование Object.Assign ()
- Это также изменит пользователь1.
let MergedUser = Object.assign(user1, jean); MergedUser; //-> {name: "jean", age: 30, location: "NY", hobby: "coding"} user1; //-> {name: "jean", age: 30, location: "NY", hobby: "coding"}
- Создание нового объединения OBJ, не изменит пользователя1
let MergedUser = Object.assign({}, user1, jean); MergedUser; //-> {name: "jean", age: 30, location: "NY", hobby: "coding"} user1; //-> {name: 'jean', age: 30 }
Без использования пустого объекта {} он изменит пользователя1. Просто говорите, что сначала возьмите пользователь1, а затем добавьте JEAN к USER1. Если вы не хотите Mutate User1, вы должны использовать пустой OBJ. «let.assign ({}, user1, джинс);” Это говорит, что создает пустую Newobj и копировать User1 к нему, а затем добавить Jean на этот Newobj.
Используя распределительный оператор
let MergedUser = { ...user1, ...jean}; MergedUser; //-> {name: "jean", age: 30, location: "NY", hobby: "coding"}
3. Объекты объединения (с такими же свойствами)
Используя объект.assign
let MergedUser = Object.assign({}, user1, user2); MergedUser; //-> {name: "John", age: 30}
Используя распределительный оператор
let MergedUser = { ...user1, ...user2}; MergedUser; //-> {name: "John", age: 30}
Свойства перезаписываются другими объектами, которые имеют те же свойства позже в порядке параметров. Этот перезапись пригодится при прохождении объектов к другим функциям, которые обновляют состояние.
Бонусное обновление недвижимости
const obj = { hi: "x", hello: "y" }; const updatedObj = { ...obj, hi: "z" }; updatedObj; //-> {hi: z, hello: "b"}
Это то, что я говорил ранее при объяснении с использованием Object.Assign () с пустой OBJ или нет. Так что в этом случае мы обновляем OBJ с новым значением.
Бонус Создать новый OBJ с обновленной собственностью других OBJ
//using Object.assign() let user = {id: 1, name: 'jean', age: 30}; let YoungerUser = Object.assign({}, user, {age: user.age - 1}) //using spread operator let user = {id: 1, name: 'jean', age: 30}; let YoungerUser = {...user, age: user.age - 1}
Это создает новый OBJ, «youngeruser». Начните с нового пустого объекта, скопируйте все из исходного пользователя, затем перезапишите возрастное свойство с новым значением. Ссылка: https://www.rockyourcode.com/use-the-spread-operator-to-update-objects/
Оригинал: “https://dev.to/cicada0315/js-spread-operator-3hl1”