2011-03-29 17 views
0

可能重複:
Javascript === vs == : Does it matter which 「equal」 operator I use?Jslint:太嚴格了? ==和===區別

當我的JSLint檢查了我的代碼,這是充滿了錯誤的...它完美的作品,甚至在IE6但因爲我不是一個優雅的編碼某種原因,我有超過100個錯誤......

,所以我想了解如何編寫更好的,沒有錯誤...但是當我使用的一些建議的JSLint了我喜歡用===替換==,那麼我做到了,並沒有什麼是工作?

所以我的問題是:我們是否有從字面上遵循所有的JSLint建議?

+2

(原文如此)警告! JSLint會傷害你的感受。 ;) – Aleadam 2011-03-29 14:49:14

+0

嘗試[JSHint](http://jshint.com/)而不是JSLint。 – 2011-03-29 15:05:32

回答

7

的JSLint測試JavaScript的一個子集專業,由Douglas Crockford的創建。從本質上講,他試圖從JavaScript語言中只挖掘「優秀部分」,讓程序員的生活更輕鬆,代碼更清晰易讀。所以,簡短的回答是NO。您不必遵循說明。完美有效的JavaScript代碼將會並且一直會失敗JSLint。

但長期的答案是你的生活將在長遠來看是顯著更容易,如果你這樣做。

採取===與==,例如。區別在於測試EQUALITY與測試IDENTITY。或者,如克羅克福德在他的書,JavaScript: The Good Parts說:

JavaScript有兩套相等運算符:===和==,和他們的孿生兄弟==和=!。好的那些以你期望的方式工作。如果兩個操作數是相同的類型並具有相同的值,則===產生true,並且!==產生false。當操作數是相同類型的時候,邪惡的雙胞胎做正確的事情,但如果它們是不同類型的,他們試圖強制價值觀。他們所做的規則很複雜,難以理解。

因此,如果您使用的是===而不是==,那麼您的代碼幾乎總能按照您預期的那樣執行,只需花費很少的代價即可輸入額外的字符。但是,如果您使用==且操作數不是相同類型(例如字符串和整數),則JavaScript將首先將這些值轉換爲相同類型,然後進行比較。他們可能不會做你想要的或者你所期望的。而且,因爲在JavaScript中,您經常處理從DOM中引入的元素,這些元素以字符串形式出現,所以您總是遇到字符串轉換問題。

由於克羅克福德寫道,這裏有一些你可能會遇到的問題:

'' == '0' => false 
0 == ''  => true 
0 == '0' => true 

false == 'false' => false 
false == '0'  => true 

扭曲,是嗎? JavaScript: The Good Parts是一本非常棒的書,如果你一直在使用JavaScript一段時間,它會改變你編寫代碼的方式。如果你像一個好的海洋一樣低頭,JSLint也會如此。

所以。長答案?不,你不需要做任何事情JSLint告訴你。但你應該。

+0

這是克羅克福德:) – 2011-03-29 15:19:11

+0

啊!你說得對,對不起!很有趣,我總是提到這本書,在我的腦海裏,我總是說'克勞福德,克勞福德,克勞福德'......也許像[this](http://www.snopes.com/language/apocryph/cambridge) .asp) – 2011-03-29 16:09:09

+0

好的答案!...所以我現在的問題是:除了螢火蟲之外,你們還使用了其他代碼驗證程序/測試程序嗎? – Francesco 2011-03-29 18:59:25

2

你不要必須按照JSLint的建議。

你不要必須寫測試。

你不要必須避免全局性。

您不需要必須檢查部署前的代碼。

你不要必須從陌生人採取糖果。

但它可以拯救你的屁股。

+3

從陌生人取糖可以拯救我的屁股?這些年來我一直在做錯事。 :p – camdez 2012-02-06 19:32:30