2

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

什么是最好的替代品

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

?

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

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

还是我错过了一些边缘情况?什么等于 ( ==) 到未定义?(假设没有人做过var undefined = 'asdf'或类似的邪恶)。

4

2 回答 2

7

x == undefined您实际检查x-undefined本身和. 的两个值null。但是请注意,没有声明的x变量会在这里触发错误;为了防止这种情况,使用...

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

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

但是,如果您对此感到安全,您可以在 JSHint 中关闭这些特定检查,并带有eqnull选项。然后...

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

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


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

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

它本质上与 simple 相同obj === undefined,但涵盖了一种特殊情况:当有人认为覆盖undefined脚本中的值是个好主意时。由于voidconstruct总是返回“真实的undefined”,即使在这种情况下,这个函数也能正常工作。

于 2012-12-10T17:50:47.387 回答
2

正确的替换是:

if( typeof x === "undefined")
于 2012-12-10T17:45:38.887 回答