JavaScript可选参数,我需要检查undefined吗?

时间:2015-05-21 00:33:13

标签: javascript

鉴于此:

function hello(name, option) {
  if (option === 'useless') {
    return '!!!!';
  } else {
    return 'Hi, ' + name;
  }
}

如果省略option参数,似乎没有任何不好的事情发生。我真的需要检查一下吗?

if (typeof option !== 'undefined' && option === 'useless')

1 个答案:

答案 0 :(得分:5)

您不需要typeof支票。

在函数范围内,形式参数始终有效identifiers

感兴趣的规范部分:

§ 10.4.3 Entering Function Code

  

9。使用功能代码代码 argumentList 执行声明绑定实例化,如10.5中所述。

§ 10.5 Declaration Binding Instantiation(强调补充)

  

4。如果代码是功能代码,那么
  [...]
  d。对于名称中的每个String argName ,按列表顺序执行
  一世。设 n n 的当前值加1   II。 如果 n 大于 argCount ,请将 v 设为undefined,否则 v args n '元素的值。
  [...]
  v。调用 env 的SetMutableBinding具体方法,将 argName v strict 作为参数传递。

这意味着,对于调用参数不足的function f(arg) {}(例如f()),arg绑定将在其execution context内初始化为undefined(又称范围)。