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