如何在不使用“参数”的情况下计算JavaScript函数的参数数量?

时间:2019-01-22 13:08:39

标签: javascript arguments strict use-strict

我一直在更新我前一段时间写的一个库,这样做的时候我意识到在严格模式下进行测试时会出现意外错误。这些是由于某些API函数开始时进行的检查而导致的,如果参数数量不正确,则会引发错误。这是一个示例:

if(arguments.length < 2){
    throw new Error("Function requires at least two arguments.");
}

第二个参数绝对可以是任何值,因此检查null / undefined并不表示该参数丢失还是无效。但是,如果缺少该参数,则使用中绝对存在错误。如果可能的话,我想将其报告为引发的Error

不幸的是,在严格模式下无法访问arguments对象。尝试在上面的代码片段中访问它会产生错误。

如何在不访问arguments对象的情况下以严格模式执行类似的检查?

编辑:Nina Scholz错误地将此问题标记为重复。

1 个答案:

答案 0 :(得分:4)

您可以检查预期参数(Function#length)的长度,并对照给定参数(arguments.length)。

这同样适用于'strict mode'

'use strict';

function foo(a, b) {
    console.log('function length:', foo.length);
    console.log('argument length:', arguments.length);
    console.log('values:', a, b)
}

foo();
foo(1);
foo(1, 2);
foo(1, 2, 3);
.as-console-wrapper { max-height: 100% !important; top: 0; }