1

問題

私の混乱を説明するために、サンプルの JavaScript ファイルを作成しました。

(function() { console.log(true == true); })()

これにより、2 つのエラーが発生するはずです。最初に の==代わりに を使用し、次に===セミコロンがありません。ただし、実行すると

var jshint = require('jshint').JSHINT;
jshint('(function() { console.log(true == true); })()');

ノード REPL でオンにすると、予期しないときにエラーが発生します。エラーが発生しないと予想する理由は、JSHint ドキュメントに次のように記載されているためです。

[to jshint] の 2 番目のパラメーターは、JSHINT の動作を制御するオプションのオプション オブジェクトです。ほとんどのオプションはブール値です。これらはすべてオプションであり、デフォルト値は false です。

オプションを定義していないため、これはエラーを生成しないと予想されるため、すべてが false になるはずです。予期しない動作の最後の部分は、オプションを設定しても何も起こらないように見えることです。jshint に対する次の 2 つの呼び出しでも、同じエラーが発生します。

var myFile = '(function() { console.log(true == true); })()';
jshint(myFile, {eqeqeq: false, asi: false});
jshint('/*jshint eqeqeq:false, asi:false */\n' + myFile);

質問

JSHint オプションがどのように機能するのかよくわかりません。ドキュメントを誤解している可能性があります。上記の呼び出しjshintまたは私の仮定のどちらが間違っているか、または実際に JSHint に問題があるかどうかを知っていただければ幸いです。

4

1 に答える 1

6

すべてのオプションがデフォルトでオフになっているわけではありません。私たちのドキュメント (http://www.jshint.com/docs/) では、いくつかのオプションが「強制」であり、いくつかの「緩和」であることがわかります[1]。これは、いくつかの警告がデフォルトで表示されることを意味し、それらをオフにするには「リラックス」オプションを有効にする必要があります。

さて、この情報を使用して、2 番目の質問を見てみましょう。

/*jshint eqeqeq:false, asi:false */
(function () { console.log(true == true); })()

このコードは、安全でない比較警告をトリガーし、== trueセミコロンがありません。eqeqeq と asi の 2 つのオプションをオフにして、これを修正しようとしました。前者を true に設定すると、すべての場所で厳密な比較が必要になり、デフォルトではオフになっているため、省略できます。JSHint は== true/false/0/null比較が安全でないと見なし、現在それをオフにする方法がないため、警告が表示されます (a == bたとえば、警告は表示されません)[2]。後者のオプション (asi) はリラックスできるオプションなので、セミコロンの欠落を許容してもよいことを JSHint に伝えるには、実際にこれをオンにする必要があります。したがって、例を渡すには、次のように変更する必要があります。

/*jshint asi:true */
(function () { console.log(true === true); }()

[1] — これが紛らわしいことは理解しています。下位互換性のため、オプションの動作を変更することはできませんが、混乱を少なくするために取り組んでいます。各オプションのデフォルト値をドキュメントにすぐに追加します。

[2] — 今後の 1.0.0 リリースでは、対応する名前付きオプションがなくても、コードによって警告を無視できるようになります。

于 2012-12-16T22:13:40.590 に答える