在JavaScript中有没有足够的参数?为什么?

bat*_*man 4 javascript error-handling firefox google-chrome

在JavaScript中,不将某些参数传递给某些函数是有效的.它们被视为undefined对许多函数的逻辑至关重要.

我已经读过这个名为"没有足够的参数"的错误.这是标准的吗?它为什么存在?

function foo(a) {
  // yada yada
}
try {
  foo();
} catch (e) {
  console.log(e.name);
}
Run Code Online (Sandbox Code Playgroud)

^此代码没有在Firefox和Chrome上引发任何内容.

aps*_*ers 7

我已经读过这个名为"没有足够的参数"的错误.

这不是标准语言级错误; 这是一个API级别的错误.也就是说,JavaScript通常不关心传递给函数的实际参数的数量是否与函数的形式参数匹配.但是,用JavaScript编写的特定API可能会关心参数的数量.

例如,Firefox的addEventListener功能(Firefox的DOM API的一部分)可能会抛出"不够参数"错误,因为规范addEventListener定义为至少需要两个参数.

您可以使用该arguments对象测试传递给函数的实际参数的数量:

function foo(a, b) {
    if(arguments.length < 2) {
        throw TypeError("Not enough arguments; two expected");
    }

    if(arguments.length > 2) {
        throw TypeError("Too many arguments; two expected");
    }

    if(arguments.length > 10) {
        throw TypeError("Way too many arguments; did you even read the docs?");
    }
}
Run Code Online (Sandbox Code Playgroud)

如果您希望参数不匹配导致错误,您的代码必须检测参数的数量并主动抛出错误.这个版本foo 抛出一个TypeError被你的catch块捕获.

但请记住,错误与正式参数的数量无关foo.我可以将其定义为function foo(a,b,c),但仍然通过检查强制执行两个参数的要求arguments.