JavaScript可选参数,我是否需要检查未定义

JavaScript optional argument, do I need to check for undefined?

本文关键字:检查 未定义 是否 参数 JavaScript      更新时间:2023-09-26

鉴于此:

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

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

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

您不需要typeof检查

形式形参总是函数作用域中有效的标识符。

规范中感兴趣的部分:

§10.4.3输入功能代码

9。使用函数代码codeargumentList执行声明绑定实例化,如10.5中所述。

§10.5声明绑定实例化(强调)

4。如果code是函数代码,则
,,[…]
,,d.对于names中的每个String argName,按列表顺序执行
,,,,i.设nn加1的当前值。
,,,,2如果n大于argCount,则设vundefined,否则设vargsn的第一个元素的值。
,,,,[…]
,,,,v.调用env的SetMutableBinding具体方法,传递argNamevstrict作为参数。

这意味着,对于没有足够参数调用的function f(arg) {}(例如f()), arg绑定将在其执行上下文(又名作用域)中初始化为undefined