Существуют ли стандартные способы обозначения аргумента функции как неиспользуемого в JavaScript, аналогичного началу аргумента метода с подчеркиванием в Ruby?
Стандартные соглашения для указания аргумента функции не используются в JavaScript
Ответ 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));