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

Sop*_*hie 4 javascript arguments strict use-strict

我一直在更新我前段时间写的一个库,这样做时我意识到在严格模式下测试时会出现意外错误。这些问题的出现是因为某些 API 函数开始时的检查会在参数数量不正确时抛出错误。下面是一个例子:

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

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

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

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

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

Nin*_*olz 5

您可以检查预期参数 ( 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);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)