2011-01-31 8 views
16

可能性の重複:
What good is JSLint if jQuery fails the validationどうしてJQueryがJSLintを渡さないのですか?

http://code.jquery.com/jquery-1.4.4.js

ゴーそこへとwww.jslint.com

に貼り付けるには、jQueryの有効であると想定されていません。 ...

+4

これは以前に尋ねられました。 http://stackoverflow.com/questions/505251/what-good-is-jslint-if-jquery-fails-the-validation –

+2

JSLintは有効性についてのものではありません。それはコーディング規約に関するものです。それは私の視点です。 – HerrSerker

答えて

87

それに準拠するにはあまりにも多くの作業があります。は、ブラウザ間で互換性があります。 JSLintは便利ですが、唯一の汎用パーサーです。 jQueryにはエラーを投げる良い理由があります。

準拠していないブラウザで動作するコードを取得するには、単純なダーティハッキングが必要な場合もあります。

はのは、それらを一つ一つ見てみましょう:行231文字20で

問題:期待 '===' と代わりに '==' を見ました。

return num == null?ここで

jqueryのundefinednullの両方をチェックするためにnull==を使用しています。 jQueryは外部ライブラリとして使用されるため、関数に渡す入力がundefinedまたはnullになるかどうかを調べることはできません。両方をチェックする方が安全です。

Doing num === undefined || num === nullは、JSLintを満足させるのはばかげている。ライン446文字29で

問題: 条件式を期待して ではなく、割り当てを見ました。

一方は、((FN =準備する[I ++])){ここ

はJSLint代わりの割り当てについて不平を言うチェックに等しいです。 JSLintがこのエラーをスローする理由は、間違って==の代わりに=と入力するためです。このwhileループでの割り当ては、コードをより綺麗にするために行われます。

問題行550の文字9:空 ブロック。

var key; for(key in obj){}
リターンキー===未定義|| hasOwn.call(obj、key);

JSLintは、ブロックが空であると文句を言う。これはここでは目的のために実行されています.keyで何もしたくないので、すべてのキーを列挙し、最後のキーだけを気にします。ライン554文字15で

問題: 関数の先頭に 'VAR' の宣言を移動します。 (OBJにおけるVAR名){

JSLintため

は、関数の先頭に変数宣言を有することに主張しています。これは少し愚かで、あなたがしたいならば無視することができます。それはスタイルの問題です。

そしてパーサがクラッシュします。コードの一部を削除して、もっと苦情を見つけることができるかどうかを見てみましょう。 '& &' の部分式は括弧内 をラップする必要があります:行792文字42で

問題。

ua.indexOf( "互換性") & rmozilla.exec(UA)||

私はこの1つに丁度同意します(ua.indexO("compatile") < 0) &&です。ラインで

問題872文字3:機能が含まれている 括弧の中に 呼び出しを移動します。 (); 0123閉鎖のために

のような:

(function() { 

})(); 
//}()); 

JSLintはスタイルの問題として括弧内の関数invokionを参照してくださいすることを好みます。私もこれに同意しますが、本当に重要ではありません。

問題972行目の問題13: 'e' が既に定義されています。

}キャッチ(E){

パーサーは、我々は外それを変更した場合、それは問題でdoesntのよう eのみそのcatchブロックに局所的に使用されることを知っている。この場合、変数 eのリユース文句さ

キャッチブロックここで私は、行1097文字21で変数名を再利用しe

問題の読みやすさを好む: が予想される「===」を、代わりに「==」を見ました。

elem = elem == window?

[OK]を、あなたは私にこの1つをキャッチしました。 が割り当てまたは関数 呼び出しを期待し、代わりに式を見た:私はjQueryの===ラインで問題1621文字24

window上を使用していない理由としてstumbedよ。

parent.selectedIndex;

// Safari mis-reports the default selected property of an option 
// Accessing the parent's selectedIndex property fixes it 
if (name === "selected" && !jQuery.support.optSelected) { 
    var parent = elem.parentNode; 
if (parent) { 
    parent.selectedIndex; 

はここで固定することができ、それらのクロスブラウザ準拠のバグの一つだが、ライン977文字17で悪いcode

問題が発生します。 「ケース」の後に「休憩」を欠落します。

場合、 "最後":

JSLintは常にあなたの例の後に壊れなければならないと言います。それは事件の後に落ちるのに完全に有効です。ほとんどの場合breakに忘れましたが、これは意図的です。行1099文字77で

問題: は、代入や関数呼び出し を期待し、代わりに式を見ました。

Array.prototype.slice.call( document.documentElement.childNodes、0 )[0] .nodeファイル...

// Perform a simple check to determine if the browser is capable of 
// converting a NodeList to an array using builtin methods. 
// Also verifies that the returned array holds DOM nodes 
// (which is not the case in the Blackberry browser) 
try { 
    Array.prototype.slice.call(document.documentElement.childNodes, 0)[0].nodeType; 

ここでソースは、自身のために話します。これは奇妙な発言ですが、このようにアクセスするとエラーが発生した場合、それを捕まえることができます。 JSLintはあなたに "これは本当にこれをするつもりでしたか?"

問題は2377行目の文字15で、変数 'name'に「 」が含まれていません。

(オプション名)用

{

ここJSLintは、グローバルスコープでwindow.nameと競合することができるnameの使用について不平を言います。これは「まだ予約されていない未来のキーワードですが、やはり避けるべきです」。閉鎖していたので安全です。

問題2486行目の問題29:Too 多くのエラー。 (60%スキャン)。

JSLintの内部スタックでは処理できません。私は今停止するつもりです。

私はその点が説明されていると思います。

JSLintには「これをしてもよろしいですか」というメッセージがたくさんあります。間違いのように見えるかもしれませんが、そうではありません。

+4

私はそれが悪いとは反対です。 jslintは便利です。それに続くルールは、エラーと警告が何を意味し、いつ無視できるのかを知るためのガイドラインです。 –

+0

@ElYoboあなたの権利。私はJSLintで少しひどかった。 – Raynos

+1

これは、すべてのブラウザで '(null == undefined)=== true'を意味しますか? – Alxandr

6

jslintが使用するルールは、のガイドラインで、破られないルールです。あなたがそれらのいくつかを無視したいかもしれない多くの理由があります。

そこにはかなり多くのものがあります。detailed considerations of jslint rulesです。多くの人々はそれに同意しない。

個人的には気に入っていますが、各JSファイルの先頭にあるコメントを使用して、自分が行っていることが適切であることを知ったときにさまざまな警告をオン/オフすることができます。次に、CIテストの一環としてJSのすべてに対してjslintを実行します。そして、それは今、いくつかの些細な間違いを犯し、その後一般的に私たちを悩ますことなくキャッチします。

+0

さまざまな設定をオン/オフしても、JSLintがエラーをスローするものがまだありますが、実際にやりたいことがあります。あなたはJSLintを十分にコントロールできません。 – Raynos

+1

私はテストに特別なフラグを付け加えて、私が本当に好きではないことをしたいコンポーネントに対してjslintを完全にスキップしました:)私は、とにかく、私の好みのために、jslintそれはキャッチするものとphpcsがサーバー側のコードと同じように一貫したスタイルを強制するためです –

+0

[jshint](http://jshint.com/)は同様のチェックをより柔軟に行います。 –

関連する問題