我一直在更新我前一段时间写的一个库,这样做的时候我意识到在严格模式下进行测试时会出现意外错误。这些是由于某些API函数开始时进行的检查而导致的,如果参数数量不正确,则会引发错误。这是一个示例:
if(arguments.length < 2){
throw new Error("Function requires at least two arguments.");
}
第二个参数绝对可以是任何值,因此检查null / undefined并不表示该参数丢失还是无效。但是,如果缺少该参数,则使用中绝对存在错误。如果可能的话,我想将其报告为引发的Error
。
不幸的是,在严格模式下无法访问arguments
对象。尝试在上面的代码片段中访问它会产生错误。
如何在不访问arguments
对象的情况下以严格模式执行类似的检查?
编辑:Nina Scholz错误地将此问题标记为重复。
答案 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; }