要求不存在的javascript参数有风险吗?

时间:2011-06-07 14:09:27

标签: javascript

如果我有一个功能

foo()

我大部分时间都没有参数,但在特殊情况下只有一个参数是

var arg1 = arguments[0];
if (arg1) {
     <special case code>
}

在函数内部做一件完全安全的事情?

5 个答案:

答案 0 :(得分:1)

是的,这是安全的。 除非您传递false""0nullundefined作为参数。最好再检查一下undefined的值。 (如果你传入undefined那么强硬!这不是一个有效的论点。)

有3个受欢迎的支票

  • foo === undefined 标准检查某人(邪恶)可能会window.undefined = true
  • typeof foo !== "undefined" 检查类型是否安全。
  • foo === void 0 void 0返回真实的undefined

但这是首选的

function myFunction(foo) {
  if (foo !== undefined) {
    ...
  } else {
    ...
  }
}

答案 1 :(得分:0)

是的,没关系。一个合理的替代方法是命名参数,而不是使用arguments对象:

function foo(specialArg)
{
    if (specialArg)
    {
        // special case code
    }
}

请注意,if(bar)会测试bar真实性。如果您使用任何虚假值(例如foofoo(0)foo(false)等)致电foo(null),则特殊用例代码将不会在上述功能中执行(或原始功能,就此而言)。您可以将测试更改为

if (typeof specialArg !=== 'undefined')
{
    // ...
}

确保在提供参数但执行伪造时执行特殊情况代码。

答案 2 :(得分:0)

你可以这样做:

function foo(arg1){

 if (arg1){
   // Special case
 }
 else{
  // No argument

 }
 // Rest of function
}

答案 3 :(得分:0)

只要您充分记录行为,我就不会发现任何问题。

然而,你最好检查一下参数长度,而不是你现在的做法。比如说你叫:

myFunction(0);

永远不会处理这个论点。

如果它是一个可选参数,你可能最好将它作为函数中的命名参数并检查是否传入了定义的值,这取决于你的用例。

答案 4 :(得分:0)

你感兴趣的基本事实是“用0或1个参数调用foo?”。所以我会测试arguments.length以避免将来评估为false的特殊参数的问题。