检查函数在Javascript中需要多少个参数?

ajs*_*sie 51 javascript

随着arguments.length我可以看到有多少参数传递给函数.

但有没有办法确定一个函数可以使用多少个参数,所以我知道应该传递多少个参数?

Har*_*men 80

Function.length 会做的工作(在我看来真的很奇怪)

function test( a, b, c ){}

alert( test.length ); // 3
Run Code Online (Sandbox Code Playgroud)

顺便说一下,这个长度属性非常有用,请看看John Resig关于Javascript的教程的这些幻灯片

  • 您甚至可以解析`Function.toString()`的结果来检查参数的名称.丑陋,但这是可能的. (2认同)

Mat*_*nes 8

arity属性指定当前函数期望接收的参数数.这与arguments.length表示传入了多少实际参数的不同.

https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function/arity

编辑

请注意,arity自v1.4以来已弃用.现在function.length正如Harmen所建议的那样,获得预期参数数量的正确方法.

  • 元数已被弃用。从您的链接:“arity 不再使用,并已被 length 属性取代。” (2认同)

538*_*MEO 7

边缘情况

请注意,在指望 之前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
Run Code Online (Sandbox Code Playgroud)

fn.length 似乎无法识别默认值或休息运算符。

你可以弄乱这个codePen