Стандартные соглашения для указания аргумента функции не используются в JavaScript
Существуют ли стандартные способы обозначения аргумента функции как неиспользуемого в JavaScript, аналогичного началу аргумента метода с подчеркиванием в Ruby?
Ответы
Ответ 1
Просто у нас есть пример для работы, это довольно часто встречается с jQuery $.each
, где вы пишете код, который не нуждается в индексе, просто значение, в обратном вызове итерации ($.each
назад относительно Array#forEach
):
$.each(objectOrArrayLikeThing, function(_, value) { }
// Use value here
});
Использование _
является самым близким, которое я видел стандартным способом сделать это, да, но я также видел много других — давая ему название, отражающее его назначение в любом случае (index
), называя его unused
и т.д.
Ответ 2
С браузерами, поддерживающими деструктуризацию, можно сделать:
function ({}, {}, value) {
// console.log(value)
}
Это очень удобно, поскольку позволяет избежать проблемы с несколькими аргументами, имеющими одно и то же имя, а также не создает проблем с библиотеками, которые присваивают методы _
(lodash, подчеркивание и т.д.).
Одна из проблем этого подхода заключается в том, что неиспользуемые аргументы типа undefined
или null
будут выбрасываться.
Для undefined
одним из решений является использование параметров по умолчанию:
function ({}={}, {}={}, value) {
// console.log(value)
}
К сожалению, нет такого легко применяемого решения для null
.
Ответ 3
Использование _
является стандартным, вероятно, учитывая, как многие разработчики JS также используют Ruby.
Обратите внимание, что в Ruby вы не используете имена переменных, начинающиеся с _
, чтобы игнорировать параметры - поскольку они являются допустимыми именами переменных, но _
сам , который не является переменной, а черной дыройудаp > . def f(_, _, x)
(игнорирование двух аргументов); def f(_a, _a, x)
недействителен (два параметра имеют одно и то же имя); def f(_a, _b, x) puts _a, _b, x end; f(1, 2, 3)
выводит все три числа.
Вы можете сделать то же самое в JavaScript с любой переменной - JavaScript не видит ничего неправильного в повторении имен параметров: function a(a, a, x) { return [a, x]; }
является допустимым объявлением, а более поздние значения перезаписывают более ранние: a(1, 2, 3)
возвращает [2, 3]
. _
- это просто другое имя переменной в JavaScript, без специальной обработки.
EDIT: Спасибо Andrew Grimm за хорошую ссылку на _
в Ruby.
Ответ 4
Я бы порекомендовал этот синтаксис:
function(_index, value) {...}
не скрывать переменную lodash и по-прежнему иметь описание аргумента в случае его использования.
VS Code также правильно выделяет эти имена, и эти неиспользуемые аргументы не будут удалены после запаха кода автофиксации
Ответ 5
Как насчет использования объекта arguments
function
?
function third() { const [,,thirdArg] = arguments;
return thirdArg;
}
console.log(third(1,2,3));