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

时间:2012-12-10 17:42:07

标签: javascript undefined

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

什么是

的最佳替代品
if (x == undefined) {...}

我正在使用underscore.js,具体如下:

if (x === null || _.isUndefined(x)) {...}

或者我错过了一些边缘案例? 什么是未定义的(==)? (假设没有人做var undefined = 'asdf'或任何邪恶的事情)。

2 个答案:

答案 0 :(得分:7)

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

if (typeof x === 'undefined' || x === null) { ... }

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

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

if (x == null) { ... }

...将同时检查nullundefined,但不会触发警告。但请注意,此选项未涵盖== undefined次比较。


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

_.isUndefined = function(obj) {
  return obj === void 0;
};

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

答案 1 :(得分:2)

正确的替换是:

if( typeof x === "undefined")