関数 JavaScript 変数がドル記号で始まるのはなぜですか?




node js ドル マーク (13)

ドル記号($)または二重ドル記号($$)が表示され、Prototypeフレームワークでこれが何を意味しているのか不思議です。

$$('div');
// -> all DIVs in the document.  Same as document.getElementsByTagName('div')!

$$('#contents');
// -> same as $('contents'), only it returns an array anyway (even though IDs must be unique within a document).

$$('li.faux');
// -> all LI elements with class 'faux'

ソース:
http://www.prototypejs.org/api/utility/dollar-dollar

ドル記号で始まる変数を持つJavaScriptがよく見かける。 このように変数に接頭辞を付けるのはいつ/なぜですか?

(私はあなたがjQueryなどで見られる$('p.foo')構文については求めていないが、 $name$orderような通常の変数)


識別子を接頭辞として使用するだけで、テンプレートの置換トークンなど、生成されたコードに使用されるはずです。


Stevoはそうだ、ドルスクリプトの記号の意味と使い方は(JavascriptとjQueryプラットフォームではあるがPHPではない)完全に意味がある。 $は識別子名の一部として使用できる文字です。 さらに、ドル記号はおそらくあなたがJavascriptで遭遇することができる最も奇妙なものではありません。 有効な識別子名の例を次に示します。

var _       = function() { alert("hello from _"); }
var \u0024  = function() { alert("hello from $ defined as u0024"); }
var Ø       = function() { alert("hello from Ø"); }
var $$$$$   = function() { alert("hello from $$$$$"); }

上記の例はすべて動作します。

それらを試してください。


jQueryでよく使用されるのは、変数に格納されたjQueryオブジェクトを他の変数と区別することです。 たとえば、私は

var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself

これはjQueryコードを記述するのに非常に役立ち、異なるプロパティセットを持つjQueryオブジェクトを簡単に見ることができます。


角度使用は、フレームワークによって生成されたプロパティです。 ECMA-262 3.0で提供されている(現在は存在しない)ヒントがあると思います。


AngularJSのコンテキストでは、 $接頭辞はフレームワークのコード内の識別子にのみ使用されます。 フレームワークのユーザは、独自の識別子でそのフレームワークを使用しないように指示されています。

角型名前空間$$$

あなたのコードとの間違った名前の衝突を防ぐために、Angularは、 $で表される公開オブジェクトの名前に接頭辞を付け、プライベートオブジェクトの名前には$$ます。 コードに$または$$接頭辞を使用しないでください。

ソース: https://docs.angularjs.org/api : https://docs.angularjs.org/api


私はこのコンベンションを2006年に創設し、初期のjQueryメーリングリストでプロモートした人物でした。そこで、私はその周りの歴史とモチベーションの一部を分かち合いましょう。

受け入れられた答えはこの例を与えます:

var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself

しかし、それは実際にそれをよく説明していません。 $なくてもemailemail_field 2つの変数名がありemail 。 それは十分に良いです。 私たちがすでに2つの異なる名前を持っている場合、名前の1つに$入れなければならないのはなぜですか?

実際、私はここで2つの理由からemail_fieldを使用していないでしょう: names_with_underscoresは慣用的なJavaScriptではなく、 fieldはDOM要素にとって意味をなさない。 しかし私は同じ考え方に従った。

私はいくつかの異なるものを試しました。その中でも、例に非常に似ています。

var email = $("#email"), emailElement = $("#email")[0];
// Now email is a jQuery object and emailElement is the first/only DOM element in it

(もちろん、jQueryオブジェクトは複数のDOM要素を持つことができますが、私が開発していたコードでは多くのidセレクタが使用されていたため、1:1の対応がありました。

関数がパラメータとしてDOM要素を受け取り、そのためにjQueryオブジェクトが必要な別のケースもありました。

// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
    var emailJQ = $(email);
    // Now email is the DOM element and emailJQ is a jQuery object for it
}

まあ、それは少し混乱している! 私の少しのコードでは、 emailはjQueryオブジェクトで、 emailElementはDOM要素ですが、 emailはDOM要素ですemailJQはjQueryオブジェクトです。

一貫性はなく、私はそれらを混ぜ合わせていた。 さらに、同じことについて2つの異なる名前、つまりjQueryオブジェクト用と、対応するDOM要素用の2つの異なる名前を作り続けることは厄介なことでした。 emailemailElementemailElement以外にも、私は他のバリエーションも試していました。

それから私は共通のパターンに気づいた:

var email = $("#email");
var emailJQ = $(email);

JavaScriptは$を名前のための単なる別の文字として扱うので、私はいつも$(whatever)呼び出しからjQueryオブジェクトを取得しているので、パターンはついに私にもたらされました。 私は$(...)コールを受け取り、ちょうどいくつかの文字を取り除くことができました。それはかなりいい名前で始まります:

$("#email")
$(email)

ストライクアウトは完璧ではありませんが、いくつかの文字を削除すると、両方の行が次のようになります。

$email

それがemailElementemailJQようなコンベンションを作る必要がないことがemailJQです。 既に私を見つめている素晴らしいコンベンションがありました。 $(whatever)呼び出しからいくつかの文字を取り出し、 $(whatever)に変わります。

var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object

そして:

// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
    var $email = $(email);
    // $email is the jQuery object and email is the DOM object
    // Same names as in the code above. Yay!
}

だから私はいつも2つの異なる名前を作る必要はありませんでしたが、 $プレフィックスの有無にかかわらず同じ名前を使うことができました。 $接頭辞は、私がjQueryオブジェクトを扱っていたことを思い出させるものです。

$('#email').click( ... );

または:

var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );

ECMAScriptの第1版 、第2 第3版では 、$ -prefixed変数名を使用することは、自動生成されたコードのコンテキストを除いて、仕様によって明示的に推奨されませんでした。

ドル記号( $ )とアンダースコア( _ )は識別子のどこでも許可されます。 ドル記号は、機械的に生成されたコードでのみ使用されます。

しかし、次のバージョン(現在の第5版 )では、この制限が解除され、上記の置き換えは

ドル記号( $ )とアンダースコア( _ )は、 IdentifierNameのどこでも許可されます。

したがって、$記号は変数名で自由に使用できます。 特定のフレームワークとライブラリには、シンボルの意味に関する独自の慣習があります(他の回答に記載されています)。


変数名の冒頭にある_は、プライベート変数(または少なくともプライベート変数)を示すのによく使われるので、自分の簡単なエイリアスをジェネリックコードライブラリに追加するのに便利です。

たとえば、jQueryを使用する場合は、 $J代わりに変数$Jを使用し、php.jsなどを使用する場合は$Pを使用することをお勧めします。

接頭辞は、私自身の静的変数のような他の変数と視覚的に区別され、コードがライブラリやその他の一部であるという事実を私に伝えます。

また、各ライブラリ呼び出しのために完全に指定された名前が繰り返されるので、コードを混乱させたり、追加の入力を必要としたりしません。

私は、単一のキーの可能性を拡大するために修飾キーが行うことと似ていると考えています。

しかしこれは私自身の大会です。


$文字はJavaScriptエンジンにとって特別な意味を持ちません。 これは、az、AZ、_、0-9などのような変数名のもう一つの有効な文字です...


ドル記号は、機械的に生成されたコードによって使用されることが意図されています。 しかし、この規約は、広く普及しているJavaScriptライブラリによっては壊れています。 JQuery、Prototype、MS AJAX(AKA Atlas)はすべてこの文字を識別子(または識別子全体)として使用します。

つまり、いつでも$を使うことができます。 (通訳者は不平を言うことはありません)。質問はいつそれを使いたいのですか?

私は個人的には使用しませんが、その使用は有効だと思います。 私はMS AJAXが関数をより冗長な呼び出しのエイリアスであることを示すために使用していると思います。

例えば:

var $get = function(id) { return document.getElementById(id); }

それは妥当な条約のようです。


$は、通常の変数の場合に共通変数とjquery変数との間のDISTINGUISHに使用されます。 FLIPKARTで注文すると、注文が文字列出力を示す変数であれば、それは "order"という単純な名前になりますが、注文をクリックするとオブジェクトが返され、そのオブジェクトは "$プログラマがコード全体のjavascript変数とjquery変数を取り除くことができるようにします。


私が過去4年間経験したように、値/オブジェクトを指す変数かjQueryがDOM要素をラップしたかどうかを簡単に識別できるようになります

Ex:
var name = 'jQuery';
var lib = {name:'jQuery',version:1.6};

var $dataDiv = $('#myDataDiv');

上記の例で変数 "$ dataDiv"が表示されたら、この変数がjQueryのラップDOM要素(この場合divです)を指していると簡単に言えます。 また、$ dataDiv.append()、$ dataDiv.html()、$ dataDiv.find()の代わりに$($ dataDiv).append()のようにオブジェクトを再度ラップしないで、すべてのjQueryメソッドを呼び出すことができます。

それが助けてくれることを願っています。 最終的にこれを守ることは良い習慣になると言いたいが、必須ではない。





naming-conventions