Javascript x==未定义的正确替换是什么?
我正在尝试清理一些代码(修复警告) 最好的替代品是什么Javascript x==未定义的正确替换是什么?,javascript,undefined,Javascript,Undefined,我正在尝试清理一些代码(修复警告) 最好的替代品是什么 if (x == undefined) {...} ? 我使用的,是以下等价物: if (x === null || _.isUndefined(x)) {...} 还是我遗漏了一些边缘案例? 什么与未定义相等(==)?(假设没有人做过var undefined='asdf'或任何类似的坏事)。正确的替代方法是: if( typeof x === "undefined") 使用x==undefined时,实际上检查x-undefine
if (x == undefined) {...}
?
我使用的,是以下等价物:
if (x === null || _.isUndefined(x)) {...}
还是我遗漏了一些边缘案例?
什么与未定义相等(
==
)?(假设没有人做过var undefined='asdf'
或任何类似的坏事)。正确的替代方法是:
if( typeof x === "undefined")
使用
x==undefined
时,实际上检查x
-undefined
本身和null
的两个值。但是请注意,缺少声明的x
变量将在此处触发错误;要防止这种情况,请使用
if (typeof x === 'undefined' || x === null) { ... }
但我实际上认为这个警告的真正含义是,您不应该在一个代码分支中同时检查null
和undefined
,因为它们是不同的值
然而,如果您对此感到安全,您可以使用eqnull
选项在JSHint中关闭这些特定检查。然后
if (x == null) { ... }
。。。将同时检查null
和undefined
,但不会触发警告。但是请注意,==未定义的
比较不包含在该选项中
作为旁注,下划线的
isUndefined
方法是一段有趣的代码:
_.isUndefined = function(obj) {
return obj === void 0;
};
它本质上与simple
obj===undefined
相同,但涵盖了一种特殊情况:当有人认为在脚本中覆盖undefined
的值是个好主意时。由于void
construct始终返回“realundefined
”,因此即使在这种情况下,此函数也能正常工作。if(typeof x=='undefined')
为什么要替换此?@xbonez为什么typeof?为什么不x==未定义的?@H2CO3“修复jshint警告”post@Kos:因为未定义的不是一个关键词,虽然这是正确的,但我认为如果解释一下==
与==
的关系,以及为什么要使用类型的,这将有助于充实。或者您刚才正忙于键入:o)您需要执行typeof以避免抛出未声明的变量up@roryf:==
和=
在这种特殊情况下是完全等效的。-1这可能会破坏代码。如果原始代码是如上所述编写的,我不想现在调试它并验证它从不接受null。现在我只想在保留其原始含义的同时对其进行重构。这是一种使用void
:)的有趣方式,当然比我的匿名函数包装器要好。