为什么JSLint推荐x ===“undefined”与typeof x ==“undefined”?

时间:2012-11-02 22:36:41

标签: javascript jquery undefined jslint typeof

我对JSLint感到困惑。

我的代码最初检查div:jqmData("me")是否未定义如下:

if ( typeof el.jqmData("me") == "undefined"  
   ? el.not(':jqmData(panel="main")').length > 0 
    : el.not(':jqmData(me="first")').length > 0 ){

}

JSLint抱怨我应该用typeof替换===,所以我确实喜欢这样:

if ( el.jqmData("me") === "undefined"  
   ? el.not(':jqmData(panel="main")').length > 0 
     : el.not(':jqmData(me="first")').length > 0 ){

}

JSLint不再抱怨了,但是我的嵌套if语句被破坏了,因为我现在总是以el.not(':jqmData(me="first")').length结束第二个,即使我不应该这样做。

问题
为什么JSLint推荐===超过typeof == undefined?怎么会打破我的逻辑?

感谢您的一些启发......

2 个答案:

答案 0 :(得分:6)

你打破了比较逻辑。假设你使用

typeof el.jqmData("me") === "undefined"  

el.jqmData("me") === undefined

就个人而言,我会选择后者。

我个人认为在这个特殊情况下这个特殊的JSLint检查没有多大意义。

答案 1 :(得分:0)

zerkms写的是正确的。但是,https://github.com/jamesallardice/jslint-error-explanations/issues/10#issuecomment-18273885

可以解释一下

undefined比较发生了风格的现代化。 ES5保证undefinedundefined。在严格模式下,与旧样式和新样式相比,typeof "undefined"检查的输入时间更长,现在不再需要,可以直接比较未定义。

参见JSLint讨论: https://plus.google.com/101248256976407044060/posts/Q5oFnnxG9oL

Crockford基本上说typeof "undefined"检查更长更慢,也没必要。