我对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
?怎么会打破我的逻辑?
感谢您的一些启发......
答案 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保证undefined
为undefined
。在严格模式下,与旧样式和新样式相比,typeof "undefined"
检查的输入时间更长,现在不再需要,可以直接比较未定义。
参见JSLint讨论: https://plus.google.com/101248256976407044060/posts/Q5oFnnxG9oL
Crockford基本上说typeof "undefined"
检查更长更慢,也没必要。