2012-11-02 34 views
9

我對JSLint感到困惑。爲什麼JSLint推薦x ===「undefined」與typeof x ==「undefined」?

如果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現在總是以2nd結尾。

問題
爲什麼JSLint的建議===超過typeof == undefined?這是如何打破我的邏輯?

感謝您的一些啓發...

+10

'x === undefined',而不是'x ==='undefined'' – zerkms

+0

哦....這很有道理...... – frequent

+0

@zerksm:請讓它成爲答案! – frequent

回答

6

你已經打破了比較邏輯。它假設你使用

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

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

個人而言,我會用後者去。

我個人認爲這個特殊的JSLint檢查在這個特殊的情況下沒有多大意義。

+0

是啊。同意。感謝您的澄清。很好,我發現這一點,我一直在改變這種情況。 – frequent

+5

但是,如果你想測試一個變量是否被定義了,那麼這是行不通的:(someundefinedvar === undefined)是一個referenceError。但即使在我測試變量def時,JSLint仍然抱怨它。 – mattacular

+0

@mattacular:是的,我錯過了,因爲我不經常檢查 – zerkms

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"檢查更長,速度較慢,是不必要的。

相關問題