誰かがJavaScriptでドル記号を説明できますか?


378

問題のコードはここにあります:

var $item = $(this).parent().parent().find('input');

変数名にドル記号を使用する目的は何ですか?単にそれを除外しないのはなぜですか?



[ttony21の回答] [1]は、JavaScriptに型がないことを示すのは誤りです。[公式ドキュメント] [2] [1]:stackoverflow.com/questions/846585/… [2]:ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam

このスレッドはかなり古いですが、主流のブラウザーは$、$$グローバル変数を標準化しているようです。$ vs $$は何をすることになっていますか?
Nick Sotiros、2014年

上記のブラウザのコンソールを使用している場合を除き、何もしません。たとえばChromeは$と$$をdocument.querySelectorand へのショートカットとして定義していますdocument.querySelectorAll
Kevin B

回答:


381

変数の '$'は、アンダースコアのように、インタプリタにとって特別な意味はありません。

私が見てきたことから、jQueryを使用する多くの人々(これはサンプルコードのように見えます)は、jQueryオブジェクトを含む変数の前に$を付ける傾向があるため、簡単に識別され、整数などと混同されません。

$()jQuery のドル記号関数は、頻繁に使用されるライブラリー関数なので、短い名前が望ましいです。


86
注:デフォルトでは、jQueryは「jQuery」のショートカットとして「$」を使用します。これは、他のJavaScriptライブラリの使用にいくつかの影響があります。docs.jquery.com/Using_jQuery_with_Other_Librariesを
Thimmayya

17
言い換えれば、$は変数/関数名の受け入れ可能な記号に相当します。行うことvar $=function(){}は行うことと非常に同じvar a=function(){}です。
F-3000

24
Thimmayyaあなたのコメント "デフォルトでは、jQueryは" jQuery "のショートカットとして" $ "を使用しています"はJqueryのWebサイトのすべてのページの上部に太字で書かれているはずです。その例は恐ろしく文書化されています。
RustyH 2014年

$が関数パラメーターとして指定されている場合はどうですか?私は次のようなコードを見ていますjQuery(document).ready(function($){...そして、$は関数実装の中で使用されています。
still_dreaming_1 2016

4
@ ThrowawayAccount3Million名前の一部にすぎません。$scope$ の場合、その名前の文字の1つです。eの最後にを外すように機能し$scopeないので、を外して$も機能しません。のようなものが表示された場合$( "a" ).addClass( "test" )、ドル記号は何であれ完全な名前です。
still_dreaming_1 2017

49

あなたの例では、$は名前の文字であること以外に特別な意味はありません。

ただし、ECMAScript 6(ES6)では、$はテンプレートリテラルを表す場合があります

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.

37

$記号は、変数と関数の識別子です。

https://web.archive.org/web/20160529121559/http://www.authenticsociety.com/blog/javascript_dollarsign

これは、ドル記号の目的を明確に説明しています。

ここに代替の説明があります:http : //www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html


2
JavaScriptにはタイプがあります。いずれにせよ、ドル記号はそれとどのように関係していますか?それはたまたまJavaScriptの正当な識別子である文字です。
エリックカプルン

10
そのリンクを「明確な」説明と呼ぶかどうかはわかりません。関数と変数の名前を定義するとき、$は単に有効な文字であることを説明するために、実際には6段落以上かかりますか?
わずか

1
最初のリンクが再び機能しているようです。代わりの説明がひどいということを@Slightに同意する必要があります。
Sander Garretsen、2015年

リンクのサンプルコードは非常に理解しやすいものです。驚くばかり!
蔡宗容

32

ドル記号は、通常の文字またはアンダースコア(_)と同様に扱われます。通訳にとって特別な意味はありません。

多くの類似言語とは異なり、JavaScriptの識別子(関数名や変数名など)には、文字、数字、アンダースコアだけでなく、ドル記号も含めることできます。ドル記号で開始することも、ドル記号のみで構成することもできます。

したがって、$はJavaScriptで有効な関数または変数名です。

なぜ識別子にドル記号が必要なのですか?

構文は、識別子でのドル記号の特定の使用法を実際に強制しないので、それをどのように使用するかはあなた次第です。以前は、生成されたコード(つまり、手動ではなくコードジェネレーターによって作成されたコード)でのみ、識別子をドル記号で開始することが推奨されていました。

しかし、あなたの例では、これはそうではないようです。誰かが楽しみのために最初にドル記号を付けたように見えます-おそらく彼らは習慣からそれをしたPHPプログラマーか何かでした。PHPでは、すべての変数名の前にドル記号を付ける必要があります。

現在、インタープリターのドル記号には、もう1つの一般的な意味があります。その名前が単一のドル記号()のみで構成されるjQueryオブジェクト$です。これは、Prototypeなどの以前のJavascriptフレームワークから借用した規則であり、jQueryが他のそのようなフレームワークで使用される場合、両方が名前を使用するため、名前の衝突$が発生します(jQueryは、グローバルオブジェクトに別の名前を使用するように構成できます)。 。jQueryが単一のドル記号をオブジェクト名として使用できるようにするJavascriptには特別なものはありません。上記のように、これは単なる別の有効な識別子名です。


これでjQueryオブジェクトを競合させることができなくなり、var $j = jQuery.noConflict();$ jがjQueryオブジェクトになります。
Justin Liu

6

ドル記号は、ecmascript 2015-2016では「テンプレートリテラル」として使用されます。例:

var a = 5;
var b = 10;
console.log(`Sum is equal: ${a + b}`); // 'Sum is equlat: 15'

ここで動作する例:https : //es6console.com/j3lg8xeo/ この記号「`」に注意してください。通常の引用符ではありません。

ライブラリjQueryを使用しているときにUが$を満たすこともできます。

正規表現の $記号は行末を意味します。


4

理由はありません。多分それをコード化した人はPHPから来ました。これは、「_ item」、「item」、または「item $$」という名前を付けた場合と同じ効果があります。

接尾辞(「item $」、「items」の発音など)として、ハンガリー語表記に類似した「フィンランド表記」と呼ばれる規則として、DOM要素などのオブザーバブルを表すことができます。


1

良い動画の説明は次のとおりです:https : //www.youtube.com/watch?v=Acm-MD_6934

Ecmaによると、国際識別子名は、いくつかの小さな変更を加えた、Unicode標準の第5章の「識別子」セクションに記載されている文法に従って解釈されるトークンです。Identifierは、ReservedWordではないIdentifierNameです(7.6.1を参照)。Unicode識別子の文法は、Unicode規格で指定されている規範的および有益な文字カテゴリの両方に基づいています。Unicode規格のバージョン3.0で指定されたカテゴリの文字は、準拠するすべてのECMAScript実装によって、それらのカテゴリのように扱われる必要があります。この規格は、特定の文字の追加を指定します。

ドル記号($)とアンダースコア(_)は、IdentifierNameのどこでも使用できます

詳細については、http//www.ecma-international.org/ecma-262/5.1/#sec-7.6を参照してください。

Ecma Internationalは1961年に設立された業界団体で、情報通信技術(ICT)と家電(CE)の標準化に取り組んでいます。


このリンクで質問に答えることができますが、回答の重要な部分をここに含め、参照用のリンクを提供することをお勧めします。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
TartanLlama 2015

... @TartanLlama私の回答をダウングレードした場合は、私の最新の回答を読んでください。ありがとうございました。
Nomis

私じゃなかった!フラグを立てました。
TartanLlama 2015

...これに反対票を投じた人にわかりました。理由を説明し、私の編集した回答を読んでください。ありがとうございました。
Nomis

5
... @TartanLlamaこれは、Stackoverflowの匿名ダウングレード機能が壊れていることを(再び)証明するだけです。自分が回答を探しているときに他の回答を見ると便利だと思うので、受け入れられた回答で古い質問に答えることは私にとっては問題ありません。
Nomis

1

jQueryを使用する場合$、変数名の接頭辞としての記号の使用は慣例によるものです。これは完全にオプションであり、例のように、変数がjQueryオブジェクトを保持することを示すためにのみ機能します。

これは、オブジェクトで別のjQuery関数を呼び出す必要がある場合に、$()再度ラップする必要がないことを意味します。たとえば、これらを比較します。

// the usual way
var item = $(this).parent().parent().find('input');
$(item).hide(); // this is a double wrap, but required for code readability
item.hide(); // this works but is very unclear how a jQuery function is getting called on this 

// with $ prefix
var $item = $(this).parent().parent().find('input');
$item.hide(); // direct call is clear
$($item).hide(); // this works too, but isn't necessary

$接頭すでにjQueryのオブジェクトを保持する変数は、と即座に認識し、コードの読みやすく、かつ排除ダブル/複数のラッピングです$()

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.