如何知道函数是否接受参数?

emv*_*idi 0 javascript

有一个具有2种可能方法的对象,有一种简单的方法可以检查方法是否接受参数,使用纯javascript:

getItems(id) {...};
getItems() {...};
Run Code Online (Sandbox Code Playgroud)

想检查方法是否接受id参数?

T.J*_*der 7

您可以从函数的属性中获取形式参数(arity)的数量length:

function zero() { }
function one(a) { }
console.log(zero.length); // 0
console.log(one.length);  // 1
Run Code Online (Sandbox Code Playgroud)

在JavaScript中,这与在任何给定的特定场合实际调用的参数数量不同,您可以从arguments函数内的伪数组(或在ES2015 +中,通过使用rest参数并获取其长度)获取.

说到ES2015,rest参数不会添加到arity中,因此:

function stillOne(a, ...rest) { }
console.log(stillOne.length); // 1
Run Code Online (Sandbox Code Playgroud)

类似地,带有默认参数的参数不会添加到arity,并且实际上会阻止其后的任何其他参数添加到它(它们被假定为具有静默默认值undefined):

function oneAgain(a, b = 42) { }
console.log(oneAgain.length);    // 1

function oneYetAgain(a, b = 42, c) { }
console.log(oneYetAgain.length); // 1
Run Code Online (Sandbox Code Playgroud)