簡體   English   中英

為什么JSLint推薦x ===“undefined”與typeof x ==“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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM