2013-05-17 17 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をチェックし、後でこれを編集します。 EDIT:大きなキャッチ[あなたによって]! Crockford、JSLintの著者、added this on April 29th of this yearの3444行目。そして、彼はjslintのソースに空のcatchブロックを使用しているので、彼は私たちにもkludgeを与えなければならないと思います。 ; ^)

JSLintは、それはあなたが意図的にあなたのcatchブロックで何かをしないようにを意味あなたのコードを読む人には自明だように、あなたは変数名としてignoreと空catchブロックをその場しのぎたいです。クロフトフォードsays elsewhereとして、「明らかなエラーと区別しにくいイディオムを使用している間は、正しいプログラムを書くことは難しい」と彼は感じています。使用

1)ex(大丈夫)だから、

(あなたはこのコードを書いて、exで何かをすれば、私は)あなたが知っている推測しているとして、jslintは文句はありません。

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

var spam; 

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

2)ignore(大丈夫、あまりにも)

ex未使用の手段あなたはexで何かをしないようにを意味のであれば、彼はあなたが台無しにしていない人々に伝えるために、コードを望んでいますその変数にignoreという名前を付けることで、exを同等のままにします。

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

var spam; 

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

3)ignoreは、典型的なCrockfordianやり方で、あなたが今使用ignore、実際にはcatchブロックで何かを行うことができない、だから、(エラー!)

を使用します!

Unexpected 'ignore'. } catch (ignore) {

はちょうど別のハイパー明示的なクロックフォードによって移動「エラーのようなコードを作成しない」を与える

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

var spam; 

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

(脇:あなたは正直対象にしている間、ignoreはその議論に基づいて、おそらく便利な慣例であるものの、Why are empty catch blocks a bad ideaを見てみるのは楽しいことかもしれません(私が意味する、それが空catchブロックに対してスキート侃々諤々を含み!)、私は少し驚いています。クロックフォードはignore kludgeを許可しています。上記のリンクには、いくつかの正規表現を「安全でない」と呼んでいるようなものがたくさんあります)。

+1

うわー!素晴らしい発見と素晴らしい答え!どうもありがとう。私は正直なところ、JSLintがあなたの言葉に沿って変更されたかどうか疑問に思っていましたが、私は長い間try-catchステートメントを使っていませんでした。その偉大な答えと素晴らしいリンクについてもう一度おねがいします。 – HartleySan

関連する問題