62

我现在正沉浸在 ES2015+ 的奢华中,有几个项目,我想知道我是否可以摆脱令人讨厌的拐杖来检查undefined新的仙境。

typeof varName === 'undefined'在 ES2015+ 中是否有更短但仍然准确的方法?

当然我可以使用默认参数,但这也感觉像是一个不必要的分配。

function coolFn(a = null){
   if (a===null) console.log("no a supplied");
}
4

2 回答 2

85

只需检查varName === undefined.

在较旧的浏览器中,可以为全局undefined变量分配一个替代值,导致该测试失败,但在 ES2015+ 中,这现在是不可能的。

请注意,undefined除了查看arguments.length.

于 2016-01-04T17:25:31.967 回答
25

唯一typeof varName === 'undefined'有用的情况是您不知道变量varName是否已声明。

而且 IMO 如果您不知道您的变量是否已声明,那么您的代码就会出现严重问题。

在其他情况下,您有更好的选择:

  • varName === void 0

    这将检测是否varName未定义。

    void是一个接收参数的运算符(你可以使用任何东西来代替0),并返回 undefined。

  • varName === undefined

    应该检测是否varName未定义。

    但是,请注意全局undefined可能已被覆盖(在 ES5 之前)或被另一个值遮蔽。因此我更喜欢void,它也更短。

  • varName == null

    这将检测是否varName未定义或为空。

  • !varName

    这将检测是否varName为 falsy(未定义、null、0、空字符串、NaN、false)。

于 2016-01-04T17:51:28.720 回答