web-dev-qa-db-ja.com

ドル記号ブルース:JavaScriptとPHP

私はC++とJavaすべてが安全で美しい場所でプログラミングをしてきました。コンパイラーは、私が迷ったことがないかどうかを常に確認してくれました。もちろん、大学でみんなが少しPerlをやっていましたが、私はしませんでした吸い込まないでください。最近の子供たちは、PHP=バックエンドとJavascriptを前面に出しています。ヒップになるために、私は同じことをしています(Web開発の場合)。実行し続ける問題intoは、誤ってJavascriptの通常の変数の前にドル記号($)を追加します。もちろん、jQueryオブジェクトでよく使用される合法的な構文であるため、誰も何も言いません。

このドル記号の混乱をとらえるデバッグツールや開発トリックはありますか?あなたはしばしば同じ間違いを犯しますか、そしてどのようにそれを感情的に扱いますか? Chrome開発ツールは、これが常にJavascriptエラーであるとは限りません。私は開発にPhpStormとEmacsを使用していますが、Emacsは私の愚かさを理解していません。それにもかかわらず私についてそれについて。

この質問がばかげていると思うなら、私はあなたが正しいと思います。しかし、私たちは変数の前にドル記号がある世界に住んでいます。そのような世界では、何もばかげたことはありません。

18
Alan Turing

変数で$を使用することに問題はありません。すべての変数に対してわざとやるつもりはありませんが、それでも有効な構文です。 jQueryは、$を変数名として使用する例の1つです。 「Chrome開発ツールは、これが常にJavascriptエラーであるとは限らない」理由もここにあります。そもそもエラーがないからです。

あなたが次のようなコードを書くことを恐れているなら:

var demo = function demo() {
    var a = 123;
    ...
    $a = 456; // A new variable is created in global scope.
}

次に、 jsLintjsHint または Google Closure Linter などのスタイルチェッカーを使用する必要があります。どれ?選択はあなた次第です。それを助けるために、ここにいくつかのメモがあります:

スタイル

Google Closure Linterは Google JavaScript Style Guide に従い、巧妙に行われることが知られています。 JavaScriptまたはその他の 6つの他の言語 のよく知られたスタイルを使用することは良い考えです。コードを共有したり、新しい開発者を雇ったりすると、彼らはすでにこのスタイルに慣れている可能性があります。

多くの開発者は、ダグラスクロックフォードスタイルにも精通しています。このスタイルは JavaScript:The Good Parts で詳細に説明されています。JavaScriptを使用するすべての人が購入する価値のある本です。

JsHintについては、使用されている規則を実際に見つけることができず、Webサイト自体はその主題について話すことを避けているようです。多分私は何かを逃した。

IDEによるサポート

JsLintとjsHintの両方 サポートされています PhpStormによる。これは、Google Closure Linterの 同様に です。

環境

Google Closure Linterは 一連のツール の1つです。既に Google Closure Compiler または Google Closure Library を使用している場合は、他のツールよりもClosure Linterを選択することをお勧めします。

厳格

jsLintは厳格であることが知られています。 jsHintはより寛容ですが、これは常に良いことではありません。たとえば、jsLintをjsHintにフォークする理由の1つは 記事 で説明されています。これは、jsLintではエラーを生成するがjsHintではエラーを生成しない不良コードを示しています。

/*global jQuery */

// Example taken from jQuery 1.4.2 source
jQuery.extend({
    /* ... */

    isEmptyObject: function( obj ) {
        for ( var name in obj ) {
            return false;
        }
        return true;
    }

    /* ... */
});

JavaScriptにはブロックスコープがあるように見えますが、そうではないため、コードは不正です。 JavaScript:良い部分、p。 102、付録A:ひどい部分、範囲。言い換えると、言語を知らずにコードを見ると、nameはループの外には表示されず、表示されたままになります。

Google Closure Linterについては、jsLintとjsHintの中間にあると思いますが、それをサポートするのに十分な情報がありません。

結論

JsHintは避けます。許容範囲が広すぎるため、他のリンターが検出する可能性のあるバグを見つけることができません。使用されているスタイルガイドが見つかりません。

JsLintとGoogle Closure Linterのどちらを選択するかは明らかではありません。どちらもエキスパートが作成し、どちらも厳密に記述されたスタイルガイドに従っており、すでに何千人もの開発者が使用しています。しばらくの間両方を使用してから、より実用的な方を選択してください。

11