[英]Why does JSLint tell me to use “=== undefined” instead of “typeof … === 'undefined'”?
[英]why does JSLint recommend x === “undefined” vs. typeof x == “undefined”?
我和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語句被破壞了,因為我現在總是以第二個if el.not(':jqmData(me="first")').length
即使我不應該。
問題 :
為什么JSLint建議===
over typeof == undefined
? 怎么會打破我的邏輯呢?
謝謝你的一些啟發......
你打破了比較邏輯。 假設你使用它
typeof el.jqmData("me") === "undefined"
要么
el.jqmData("me") === undefined
就個人而言,我會選擇后者。
我個人認為在這個特殊情況下這個特殊的JSLint檢查沒有多大意義。
zerkms寫的是正確的。 但是,解釋可以從https://github.com/jamesallardice/jslint-error-explanations/issues/10#issuecomment-18273885獲得幫助:
undefined
比較發生了風格的現代化。 ES5保證undefined
undefined
。 在嚴格模式下,與舊樣式和新樣式相比,類型typeof "undefined"
檢查的類型更長,現在不再需要,因為可以直接比較undefined。
請參閱JSLint討論: https : //plus.google.com/101248256976407044060/posts/Q5oFnnxG9oL
Crockford基本上說類型typeof "undefined"
檢查更長更慢,也沒必要。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.