Кратко
СкопированоУстаревший способ получить все значения, переданные в функцию при вызове в виде массивоподобного объекта. Используется в функциях, которые принимают произвольное количество аргументов.
Не работает в стрелочных функциях.
Пример
СкопированоФункция, которая принимает произвольное количество аргументов, выбирает из них только строки и склеивает с помощью пробела:
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