我正在尝试清理一些代码(修复jshint警告)。
什么是最好的替代品
if (x == undefined) {...}
?
我正在使用underscore.js,是以下等价物:
if (x === null || _.isUndefined(x)) {...}
还是我错过了一些边缘情况?什么等于 ( ==
) 到未定义?(假设没有人做过var undefined = 'asdf'
或类似的邪恶)。
我正在尝试清理一些代码(修复jshint警告)。
什么是最好的替代品
if (x == undefined) {...}
?
我正在使用underscore.js,是以下等价物:
if (x === null || _.isUndefined(x)) {...}
还是我错过了一些边缘情况?什么等于 ( ==
) 到未定义?(假设没有人做过var undefined = 'asdf'
或类似的邪恶)。
与x == undefined
您实际检查x
-undefined
本身和. 的两个值null
。但是请注意,没有声明的x
变量会在这里触发错误;为了防止这种情况,使用...
if (typeof x === 'undefined' || x === null) { ... }
但我实际上认为这个警告的真正含义是你不应该同时检查null
一个undefined
代码分支,因为它们是不同的值。
但是,如果您对此感到安全,您可以在 JSHint 中关闭这些特定检查,并带有eqnull
选项。然后...
if (x == null) { ... }
... 将同时检查null
和undefined
,但不会触发警告。但请注意,== undefined
此选项不“涵盖”比较。
作为旁注,下划线的isUndefined
方法是一段有趣的代码:
_.isUndefined = function(obj) {
return obj === void 0;
};
它本质上与 simple 相同obj === undefined
,但涵盖了一种特殊情况:当有人认为覆盖undefined
脚本中的值是个好主意时。由于void
construct总是返回“真实的undefined
”,即使在这种情况下,这个函数也能正常工作。
正确的替换是:
if( typeof x === "undefined")