检查函数在Javascript中接受多少参数?

检查函数在Javascript中接受多少参数?,javascript,Javascript,使用arguments.length我可以看到有多少个参数被传递到一个函数中 但是有没有一种方法可以确定一个函数可以接受多少个参数,这样我就知道应该传入多少个参数了?函数。长度可以完成这项工作(在我看来,真的很奇怪) 顺便说一下,这个length属性非常有用,请看一下John Resig的Javascript教程 编辑 只有在没有为参数设置默认值时,此方法才有效 function foo(a, b, c){}; console.log(foo.length); // 3 function b

使用
arguments.length
我可以看到有多少个参数被传递到一个函数中


但是有没有一种方法可以确定一个函数可以接受多少个参数,这样我就知道应该传入多少个参数了?

函数。长度可以完成这项工作(在我看来,真的很奇怪)

顺便说一下,这个length属性非常有用,请看一下John Resig的Javascript教程

编辑

只有在没有为参数设置默认值时,此方法才有效

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不同,后者指示传入的实际参数数量

编辑 请注意,
arity
自v1.4以来一直被弃用。获得所需参数数量的正确方法现在是哈门建议的
function.length

Edge cases 注意,在计算
fn.length
之前,在某些边缘情况下,结果可能与您预期的不同:


常数fn1=(a,b)=>{};//长度:2
常数fn2=(a=0,b)=>{};//长度:0
常量fn3=(…参数)=>{};//长度:0
常数fn4=(a,b=1,c)=>{};//长度:1
fn.length
似乎无法识别默认值或rest运算符


你可以搞乱这个

arity已被弃用。从你的链接:“arity不再被使用,已经被length属性所取代。”@MartinodF-Ah,确实如此。感谢您指出这一点,我已经很久没有思考javascript中的函数了。似乎Function.length是1.4之后的合适方式。我也不知道这一点,直到我阅读了您链接的页面;)而且,至少Chrome9(我正在运行)甚至不再具有
.arity
。因为
fn.length
非常有意义(╯°□°)╯︵ ┻━┻您甚至可以分析
Function.toString()
的结果来检查参数的名称。虽然很难看,但这是可能的。请注意,这对本机函数不起作用(至少在chrome中)。为什么有人要定义一个函数,将可选参数放在必需参数之前?我指的是
fn2
fn4
。我在实践中从未见过这样的情况,在必需参数之前有可选参数的函数,对吗?是的,这只是为了举例。就像标题所说的,它是关于边缘情况。目标是演示fn.length的确切行为(在本例中,它忽略可选参数之后的所有内容)。但您确实要提醒,这是一种糟糕的做法:)
function foo(a, b, c){};
console.log(foo.length); // 3


function bar(a = '', b = 0, c = false){};
console.log(bar.length); // 0