什么是x == undefined的正确替代?

rip*_*234 2 javascript undefined

我正在尝试清理一些代码(修复jshint警告).

什么是最好的替代品

if (x == undefined) {...}
Run Code Online (Sandbox Code Playgroud)

我正在使用underscore.js,是以下等价物:

if (x === null || _.isUndefined(x)) {...}
Run Code Online (Sandbox Code Playgroud)

或者我错过了一些边缘案例?什么是==未定义的等于()?(假设没有人这样做var undefined = 'asdf'或任何邪恶的东西).

rai*_*7ow 7

随着x == undefined你实际检查的两个值x- undefined本身null.但请注意,缺少声明的x变量会在此触发错误; 要防止这种情况,请使用......

if (typeof x === 'undefined' || x === null) { ... }
Run Code Online (Sandbox Code Playgroud)

但实际上,我认为这个警告的真正含义是,你不应该同时检查nullundefined在一个代码分支,因为它们是不同的值.

然而,如果您对此感到安全,可以使用eqnull选项关闭JSHint中的这些特定检查.然后...

if (x == null) { ... }
Run Code Online (Sandbox Code Playgroud)

...将检查既为nullundefined,但不会触发报警.但请注意,== undefined此选项不会"覆盖"比较.


作为旁注,下划线的isUndefined方法是一段有趣的代码:

_.isUndefined = function(obj) {
  return obj === void 0;
};
Run Code Online (Sandbox Code Playgroud)

它基本上与简单相同obj === undefined,但涵盖了一个特例:当有人认为覆盖undefined脚本中的值时,这是一个好主意.由于void构造总是返回"真实undefined",即使在这种情况下,此功能也能正常工作.