02.i ES6 Parameters
В ES6 работа с параметрами функции была существенно расширена:
default parameter values
rest parameters (
varargs
)deconstructing on parameters
spread arguments
Default Parameters
Параметр по умолчанию используется при отсутствующем параметре или равном undefined
. При передаче любого значения, кроме undefined
, включая пустую строку, ноль или null
, параметр считается переданным, и значение по умолчанию не используется. Параметры по умолчанию могут быть не только значениями, но и выражениями и вызовами функций.
Традиционный прием для эмуляции параметров по умолчанию в ES5:
Синтаксис ES6:
Параметры могут ссылаться друг на друга в порядке своего объявления:
Значения параметров по умолчанию, а так же функции, используемы для параметров по умолчанию не видят область видимости, формируемую основным телом функции.
Если необходимо, что бы функция обладала обязательным параметром, то можно использовать следующий прием:
...rest
parameters
...rest
parametersОператор rest (…
) оператор записывает все оставшиеся переданные аргументы функции в соответствующий массив, с методами map
, forEach
и другими, в отличие от arguments
:
Использование rest
позволяет полностью заменить использование псевдо-массива arguments
. Сочетая rest и деструктуризацию можно иметь как массив, так и отдельные параметры:
Destruction in Parameters
Если хочется, чтобы функция могла быть вызвана вообще без аргументов — нужно добавить ей параметр по умолчанию — уже не внутрь деструктуризации, а в самом списке аргументов:
Option Object (Named parameters)
Можно реализовывать именованные параметры через передачу объекта (option object):
В ES6 подобную логику можно упростить при помощи деструкции параметров вместе со значениями по умолчанию:
spread
operator
spread
operatorОператор spread
применяется к любой итерируемой структуре и преобразует её в последовательность значений. Чаще всего используется при вызове функции для преобразования структуры в последовательность аргументов, передаваемых в функцию.
Части массива могут быть преобразованы в значения:
Оператор spread
выглядит так же как и оператор rest
(...
) но противоположен ему по смыслу. Оператор rest
используется только внутри функции, тогда как оператор spread
только при вызове функции или конструктора.
Вместо массива со spread
можно использовать любые итерируемые структуры, такие как строки, генераторы, объекты (?).
При строках:
В массивах:
Преобразование любой итерируемой сущности в массив:
При генераторе
Last updated
Was this helpful?