С arguments.length
я могу видеть, сколько аргументов было передано в функцию.
Но есть ли способ определить, сколько аргументов может принимать функция, поэтому я знаю, сколько я должен пройти?
С arguments.length
я могу видеть, сколько аргументов было передано в функцию.
Но есть ли способ определить, сколько аргументов может принимать функция, поэтому я знаю, сколько я должен пройти?
Function.length
сделает эту работу (на мой взгляд, очень странно)
function test( a, b, c ){}
alert( test.length ); // 3
Кстати, это свойство длины весьма полезно, взгляните на эти слайды учебника Джона Резига по Javascript
EDIT
Этот метод будет работать только в том случае, если для аргументов не установлено значение по умолчанию.
function foo(a, b, c){};
console.log(foo.length); // 3
function bar(a = '', b = 0, c = false){};
console.log(bar.length); // 0
Свойство .length
даст вам количество аргументов, которые необходимо установить, а не количество аргументов, которое имеет функция.
Свойство arity
указывает количество аргументов, ожидаемых для текущей функции. Это отличается от arguments.length
, который указывает, сколько фактических аргументов было передано.
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/arity
Обратите внимание, что arity
устарел с версии v1.4. Правильный способ получить количество ожидаемых аргументов теперь function.length
, как было предложено Harmen.
Остерегайтесь, прежде чем рассчитывать на fn.length
, есть некоторые крайние случаи, когда результат может не соответствовать ожидаемому:
const fn1 = ( a, b ) => {}; // length: 2
const fn2 = ( a = 0, b ) => {}; // length: 0
const fn3 = ( ...params ) => {};// length: 0
const fn4 = ( a, b = 1, c ) => {};// length: 1
fn.length
не распознает значения по умолчанию или оператор покоя.
Вы можете связываться с этим codePen