Кратко
СкопированоУстаревший способ получить все значения, переданные в функцию при вызове в виде массивоподобного объекта. Используется в функциях, которые принимают произвольное количество аргументов.
Не работает в стрелочных функциях.
Пример
СкопированоФункция, которая принимает произвольное количество аргументов, выбирает из них только строки и склеивает с помощью пробела:
function joinStrings() { const strings = [] for (let i = 0; i < arguments.length; i++) { if (typeof arguments[i] === 'string') { strings.push(arguments[i]) } } return strings.join(' ')}const result = joinStrings('hello', 12, 'world', false, null)console.log(result)// hello world
function joinStrings() { const strings = [] for (let i = 0; i < arguments.length; i++) { if (typeof arguments[i] === 'string') { strings.push(arguments[i]) } } return strings.join(' ') } const result = joinStrings('hello', 12, 'world', false, null) console.log(result) // hello world
Как понять
Скопированоarguments
доступно во всех видах функций, за исключением стрелочных.
arguments
— массивоподобный объект, к его элементам можно обращаться по индексу, у него есть свойство length
, но arguments
не имеет остальных методов массива, таких как push
или filter
.
Массивоподобность объекта позволяет обойти его элементы с помощью цикла.
На практике
Скопированосоветует Скопировано
🛠 Иногда нужно создать функцию-обработчик для существующего события. При этом вам могут быть нужны не все лидирующие параметры. Например, из трёх параметров нужны только второй и третий. Чтобы не получать назойливые предупреждения от линтера о неиспользованном первом параметре, можно задействовать синтаксис остаточных параметров, плюс деструктурирование массива:
function myHandler(...[, second, third]) { console.log(`Второй параметр = ${second}`) console.log(`Третий параметр = ${third}`)}myHandler(1, 2, 3)// Второй параметр = 2// Третий параметр = 3
function myHandler(...[, second, third]) { console.log(`Второй параметр = ${second}`) console.log(`Третий параметр = ${third}`) } myHandler(1, 2, 3) // Второй параметр = 2 // Третий параметр = 3
советует Скопировано
🛠 В новом коде лучше применять синтаксис остаточных параметров. В этом случае у нас появляется настоящий массив переданных аргументов. Вот как будет выглядеть пример из начала статьи в этом синтаксисе:
function joinStrings(...rest) { return rest .filter(function (value) { return typeof value === 'string' }) .join(' ')}const result = joinStrings('hello', 12, 'world', false, null)console.log(result)// hello world
function joinStrings(...rest) { return rest .filter(function (value) { return typeof value === 'string' }) .join(' ') } const result = joinStrings('hello', 12, 'world', false, null) console.log(result) // hello world