web-dev-qa-db-ja.com

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

問題のコードはこちらです。

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

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

344
Keith Donegan

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

私が見たことから、 jQuery (これはあなたのサンプルコードが私には似ていると思われる)を使用する多くの人々はjQueryオブジェクトを含む変数に接頭辞を付ける傾向があります。簡単に識別でき、整数と混同しないように$を付けてください。

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

353
cobbal

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

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

38
AlbertoPL

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

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

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

ドル記号は通常の文字またはアンダースコア(_)のように扱われます。インタプリタにとって特別な意味はありません。

Javascriptの識別子(関数名や変数名など)には、文字、数字、およびアンダースコアだけでなく、も含めることができます。ドル記号を含めることもできます。ドル記号で始めることも、ドル記号からなるのみで構成することも、それ以外でも構いません。

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

なぜ識別子にドル記号を付けたいのですか?

構文は、識別子内のドル記号の特定の使用法を実際には強制していないので、それをどのように使用したいかはあなた次第です。これまでは、生成コードでのみ識別子をドル記号で始めることをお勧めしていました。つまり、手作業ではなくコードジェネレータで作成したコードです。

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

インタプリタのドル記号にはもう1つの一般的な意味があります。名前のみが単一のドル記号($)からなるjQueryオブジェクトです。これはPrototypeのような初期のJavascriptフレームワークから引き継がれた規約で​​あり、jQueryが他のそのようなフレームワークと一緒に使用されると、両者が$という名前を使用するために名前が衝突します。 ) jQueryがそのオブジェクト名として単一のドル記号を使用することを可能にするJavascriptに特別なものは何もありません。上記のように、それは単に別の有効な識別子名です。

31
thomasrutter

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

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

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

Uはライブラリ jQuery で作業中に$に会うこともできます。

$サインイン正規表現は行末を意味します。

4
Vasyl Gutnyk

理由はありません。おそらくそれをコーディングした人がPHPから来たのでしょう。 「_item」、「item」、「item $$」という名前を付けた場合と同じ効果があります。

たぶんそれは、変数がDOM要素か何かであることに注意するためのコーダーのためのある種のハンガリー記法です。

3
Claudiu

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オブジェクトを保持している変数が即座に認識され、コードが読みやすくなり、$()による二重/多重ラッピングがなくなります。

1
SNag

これは良い短いビデオの説明です。 https://www.youtube.com/watch?v=Acm-MD_6934

Ecma Internationalによると、識別子名は、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)

1
Nomis