2014-03-31 27 views
1

我檢查了JSLint下面的代碼:兩個錯誤,我在JSLint的獲得沒有很好的理由

<!DOCTYPE html> 
<html> 

<head> 
    <meta charset="UTF-8"> 
    <title>Reset textarea</title> 
</head> 

<body> 
    <textarea id="ta"> 
     <p>Hello</p> 
    </textarea> 
    <input type="button" value="Reset" onclick="reset();"> 
    <script> 
     function reset() { 
      var ta = document.getElementById('ta'); 
      if (!ta.value || ta.value != ta.defaultValue && confirm('Are you sure?')) { 
       ta.value = ta.defaultValue; 
      } 
     } 
    </script> 
</body> 

</html> 

DEMO

而且我得到了以下錯誤:

預期「 !==',而是看到'!='。

由於textarea的值和默認值是類型string的始終,那麼就比較之前沒有類型轉換,它使除了讓你的JS文件較大絕對沒有區別!

'& &'子表達式應該包裝在parens中。

爲什麼我要加括號時&&具有更高precedence||?我可以簡單地刪除nested parentheses代替:

if (!ta.value || (ta.value != ta.defaultValue && confirm('Are you sure?'))) 


請糾正我,如果我錯了。

+0

無論發生什麼,jslint總是會喜歡嚴格的比較。此外,後者由於短路而出現。這只是保證您獲得預期結果的一種方式。 – Seiyria

+0

JSLint是對最佳實踐的解釋,儘管很多經驗已經進入定義它的主觀規則,並不一定與您對最佳實踐構成的想法保持一致。 – DaveParsons

回答

3

JSLint的被設計以產生更多的人可讀的代碼,使用由誰寫的JSLint定義的規則(其可以基於其他人的意見,但最終是隻是意見)

因此,!==是更多的人力 - 比!=可讀,因爲它明顯地表明比較是嚴格的。然而,你知道不同,因爲ta.valueta.defaultValue確實總是字符串,所以你不需要遵循JSLint的建議。

類似地,加上表達式使其更易於理解,因爲它明確了事物運行的順序。雖然您可能知道優先順序,但不是每個人都能一目瞭然,並且可能會將其解釋錯誤。

重申,JSLint是建議和意見,而不是法律。

+0

感謝您的明智和快速回復!這就像你在回答我的問題,而我正在打字! :) – Mori

+0

我已經暗中破解了StackOverflow來發布問題,因爲它們是鍵入的,並使它們對我可見。 –

+0

四月一號! ;) – Mori

相關問題