значение
Операторът за разлагане (спред) е три точки (...) )。 Това е като обратна версия на параметър за покой, превръщайки масив в последователност от параметри, разделена със запетая.
Този оператор се използва основно за извиквания на функции.
В горния код е array.push(...) items) и add(...) числа), и двете са повиквания към функции и използват оператори на разширение. Този оператор превръща масив в последователност от параметри. Операторите на разширение могат да се използват в комбинация с нормални функционални параметри, което е много гъвкаво.
Прилагане на метод за алтернативни масиви
Тъй като операторът за разширение може да разшири масива, няма нужда да се използва методът на прилагане, за да се превърне масивът в аргумент към функцията.
Ето практичен пример за оператор на разширение, който заменя метода на прилагане, прилагайки метода Math.max за опростяване на записването на най-големия елемент от масива.
Горният код казва, че тъй като JavaScript не предоставя функция за намиране на най-големия елемент от масив, можете да приложите Math.max функция само за превръщане на масива в последователност от параметри и след това да намерите максималната стойност. С оператора за разширение можете да използвате Math.max директно. Друг пример е добавянето на масив към опашката на друг масив чрез push функцията.
В ES5 метода на писане на горния код параметрите на push метода не могат да бъдат масиви, затова трябва да използваме push метода гъвкаво чрез метода appli. С оператора за разширение масивът може да бъде прехвърлен директно към push метода. Ето още един пример.
Разширяване на приложението на оператори
(1) Сливане на масиви
Операторът за разширение предоставя нов начин за записване на комбинацията от числа.
(2) комбинирано с деконструирано разпределение
Операторите на разширение могат да се комбинират с деконструирани присвоявания за генериране на масиви.
Ако използвате оператора на разширение за присвояване на масив, той може да бъде поставен само на последната цифра на параметъра, в противен случай ще бъде докладвана грешка.
(3) Връщаната стойност на функцията
JavaScript функциите могат да връщат само една стойност, а ако трябва да се върнат няколко стойности, само масиви или обекти. Операторите на разширение предоставят заобиколно решение за решаване на този проблем.
Горният код взема ред данни от базата данни, разширява оператора и го предава директно на конструктора Date.
(4) Струна
Операторите на разширение могат също да превръщат низовете в реални масиви.
Горното писане има важно предимство, а именно, че може правилно да разпознава 32-битови Unicode символи.
Първият начин за писане на горния код е, че JavaScript разпознава 32-битовите Unicode символи като 2 знака и няма проблем с операторите за разширение. Функцията, която правилно връща дължината на низа, може да се запише по следния начин:
Това е проблемът за всяка функция, която включва манипулиране на 32-битови Unicode символи. Затова е най-добре да ги пренапишете всички с оператори на разширение.
В горния код, ако не използвате оператора за разширение, операцията за обръщане на низовете е неправилна.
(5) Обекти, които реализират интерфейса на Итератора
Всеки обект в интерфейса на итератора може да бъде преобразуван в истински масив с оператор за разширение.
В горния код методът querySelectorAll връща обект nodeList. Това не е масив, а обект, подобен на масив. В този случай операторът на разширение може да го превърне в реален масив, тъй като обектът NodeList реализира интерфейса на Итератор. За тези масивоподобни обекти, които нямат разположен интерфейс за итератор, операторът на разширението не може да ги превърне в реален масив.
В горния код arrayLike е обект, подобен на масив, но без да се разположи интерфейсът на итератора, операторът на разширението ще докладва грешка. В този случай можете да използвате метода Array.from за преобразуване на arrayLike в реален масив.
(6) Структури на карти и множества, генераторни функции
Операторът на разширение вътрешно извиква интерфейса на итератора на структурата от данни, така че всеки обект с интерфейс на итератор може да използва оператор на разширение, като например структура Map.
Когато функцията Generator се изпълни, тя връща traverser обект, така че могат да се използват и оператори на разширение.
В горния код променливата go е генераторна функция и след изпълнение връща транзиторен обект, а изпълнението на оператор за разширение върху този обхождащ обект ще преобразува стойностите, получени от вътрешното преминаване, в масив. Ако използвате оператор за разширение за обект без интерфейс с итератор, ще бъде докладвана грешка.
|