2013-05-17 34 views
18

我一直在使用JSLint,但就在今天,我遇到了一個我從未見過的錯誤。用下面的代碼,我得到了如下圖所示的錯誤:JSLint錯誤:預期'忽略',而是看到'ex'

try { 

    document.execCommand('BackgroundImageCache', false, true); 

} catch (ex) {} 

錯誤:

Expected 'ignore' and instead saw 'ex'. 
} catch (ex) {} 

所以我改變了我的代碼以下,和錯誤走了:

try { 

    document.execCommand('BackgroundImageCache', false, true); 

} catch (ignore) {} 

我無法在互聯網上找到任何解釋爲什麼這會解決錯誤。有人知道這是怎麼回事,或者爲什麼這樣解決了這個問題?

謝謝。

回答

29

我認爲你是對的 - jslint並沒有像這樣抱怨過。相反,它告訴你,你需要用ex做點什麼,對吧?我會檢查github以後再查看和編輯它。 編輯:很棒[抓住你]! Crockford,JSLint的作者,added this on April 29th of this year圍繞着3444行。他在jslint的源代碼中使用了空的catch塊,所以我猜他也必須給我們一些kludge。 ; ^)

JSLint的希望您與ignore雜牌空catch塊作爲變量名,這樣很明顯的人閱讀你的代碼,你故意的意思不要做你的catch塊東西。正如Crockford says elsewhere,他認爲:「使用難以區分明顯錯誤的成語時,很難編寫正確的程序。」

1)ex使用(沒關係)

所以(我猜你懂的),如果你寫的代碼和做一些ex,JSLint的不抱怨。

/*jslint browser: true, white:true, sloppy:true*/ 

var spam; 

try { 
    spam = "spam"; 
} catch (ex) { 
    window.alert(ex); 
} 

2)ex未使用的手段ignore(好吧太)

所以,如果你意味着不要與ex做什麼,他想要的代碼告訴你沒有搞砸人通過將該變量ignore命名爲ex等價物。

/*jslint browser: true, white:true, sloppy:true*/ 

var spam; 

try { 
    spam = "spam"; 
} catch (ignore) { 
} 

3)ignore使用(錯誤!)

所以,在典型的Crockfordian時尚,你現在無法使用ignore和實際做的catch塊的東西!

/*jslint browser: true, white:true, sloppy:true*/ 

var spam; 

try { 
    spam = "spam"; 
} catch (ignore) { 
    window.alert(ignore); 
} 

這讓

Unexpected 'ignore'. } catch (ignore) {

又一個超明確的「不使代碼看起來像一個錯誤」,由克羅克福德的舉動。

(旁白:可能會很有趣,而你關於這個問題誠實地看看Why are empty catch blocks a bad idea,雖然ignore可能是一個有用的約定,根據討論(我的意思是,它包括對空catch塊飛碟雙向爭論!),我有點驚訝克羅克福德允許ignore kludge,因爲上面的鏈接有很多像調用一些正則表達式「不安全」的感覺。)

+1

哇!偉大的發現,和偉大的答案!非常感謝。我真的很想知道JSLint是否已經按照你所說的或者沒有提到的方式發生了變化,但是我沒有用過這麼長時間的try-catch聲明,我不確定。再次感謝那個偉大的答案和那個偉大的聯繫。 – HartleySan

相關問題