9

我对 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 抱怨我应该用typeofwith替换检查===,所以我这样做了:

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

}

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

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

感谢您的启发...

4

2 回答 2

6

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

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

或者

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

我个人会选择后者。

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

于 2012-11-02T22:47:48.003 回答
0

zerkms 写的是正确的。不过,来自https://github.com/jamesallardice/jslint-error-explanations/issues/10#issuecomment-18273885的解释可以提供帮助:

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

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

克罗克福德基本上说typeof "undefined"检查时间更长更慢并且没有必要。

于 2015-08-19T06:41:24.937 回答