Frage Warum beginnt eine JavaScript-Variable mit einem Dollarzeichen?


Ich sehe JavaScript oft mit Variablen, die mit einem Dollarzeichen beginnen. Wann / warum würden Sie eine Variable auf diese Weise vorsetzen?

(Ich frage nicht nach $('p.foo') Syntax, die Sie in jQuery und anderen sehen, aber normale Variablen wie $name und $order)


906
2017-10-15 18:26


Ursprung


Antworten:


Eine sehr häufige Verwendung in jQuery besteht darin, jQuery-Objekte, die in Variablen gespeichert sind, von anderen Variablen zu unterscheiden. Zum Beispiel würde ich definieren

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

Ich finde dies sehr hilfreich beim Schreiben von jQuery-Code und macht es einfach, jQuery-Objekte zu sehen, die unterschiedliche Eigenschaften haben.


1268
2018-02-16 15:42



In der 1., 2. und 3. Ausgabe von ECMAScriptDie Verwendung von $ -prefixed-Variablennamen wurde von der Spezifikation explizit unterbunden, außer im Kontext von automatisch generiertem Code:

Das Dollarzeichen ($) und der Unterstrich (_) sind überall in einer Kennung erlaubt. Das Dollarzeichen ist nur für die Verwendung in mechanisch generiertem Code vorgesehen.

In der nächsten Version (der 5. Ausgabe, die aktuell ist), wurde diese Einschränkung fallengelassen und die obige Passage durch ersetzt

Das Dollarzeichen ($) und der Unterstrich (_) sind überall in einem erlaubt ID-Name.

Daher kann das $ -Zeichen jetzt frei in Variablennamen verwendet werden. Bestimmte Frameworks und Bibliotheken haben ihre eigenen Konventionen über die Bedeutung des Symbols, die in anderen Antworten hier erwähnt werden.


220
2017-10-15 18:59



Wie andere bereits erwähnt haben, soll das Dollarzeichen durch mechanisch generierten Code verwendet werden. Diese Konvention wurde jedoch durch einige sehr beliebte JavaScript-Bibliotheken unterbrochen. JQuery, Prototype und MS AJAX (AKA Atlas) benutzen dieses Zeichen in ihren Kennungen (oder als eine ganze Kennung).

Kurz gesagt, Sie können die verwenden $ wann immer du willst. (Der Dolmetscher wird sich nicht beschweren.) Die Frage ist, wann tun Sie wollen um es zu benutzen?

Ich persönlich benutze es nicht, aber ich denke, seine Verwendung ist gültig. Ich denke, dass MS AJAX es verwendet, um anzuzeigen, dass eine Funktion ein Alias ​​für einen ausführlicheren Aufruf ist.

Beispielsweise:

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

Das scheint eine vernünftige Konvention zu sein.


56
2017-10-15 22:57



Im Kontext von AngularJS, der $ Präfix wird nur für Bezeichner im Framework-Code verwendet. Benutzer des Frameworks werden angewiesen, sie nicht in ihren eigenen Identifikatoren zu verwenden:

Eckige Namespaces $ und $$

Um versehentliche Namenskollisionen mit Ihrem Code zu verhindern, setzt Angular die Namen öffentlicher Objekte mit $ und Namen von privaten Objekten mit $$. Bitte benutzen Sie nicht die $ oder $$ Präfix in Ihrem Code.

Quelle: https://docs.angularjs.org/api


49
2017-08-30 22:51



Stevo hat Recht, die Bedeutung und Verwendung des Dollar-Skript-Zeichens (in Javascript und der jQuery-Plattform, aber nicht in PHP) ist völlig semantisch. $ ist ein Zeichen, das als Teil eines Bezeichnernamens verwendet werden kann. Außerdem ist das Dollarzeichen vielleicht nicht das "komischste" was man in Javascript finden kann. Hier sind einige Beispiele für gültige Bezeichner:

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

Alle obigen Beispiele funktionieren.

Versuch sie.


19
2017-08-08 00:34



Ich war die Person, die diese Konvention 2006 ins Leben rief und sie auf der frühen jQuery-Mailing-Liste promotete. Lassen Sie mich also etwas von der Geschichte und Motivation darüber erzählen.

Die angenommene Antwort gibt dieses Beispiel:

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

Aber das illustriert es nicht wirklich gut. Auch ohne die $hätten wir hier immer noch zwei verschiedene Variablennamen, email und email_field. Das ist gut genug. Warum sollten wir einen werfen? $ in einen der Namen, wenn wir schon zwei verschiedene Namen haben?

Eigentlich hätte ich nicht gebraucht email_field hier aus zwei Gründen: names_with_underscores sind nicht idiomatisch JavaScript und field ist für ein DOM-Element nicht wirklich sinnvoll. Aber ich folgte der gleichen Idee.

Ich habe ein paar verschiedene Dinge ausprobiert, darunter auch etwas, das dem Beispiel sehr ähnlich ist:

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

(Natürlich kann ein jQuery-Objekt mehr als ein DOM-Element haben, aber der Code, an dem ich arbeitete, hatte eine Menge id Selektoren, so in diesen Fällen gab es eine 1: 1-Korrespondenz.)

Ich hatte einen weiteren Fall, in dem eine Funktion ein DOM-Element als Parameter erhielt und auch ein jQuery-Objekt dafür benötigte:

// 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
}

Nun, das ist ein wenig verwirrend! In einem meiner Code-Teile, email ist das jQuery-Objekt und emailElement ist das DOM-Element, aber in der anderen, email ist das DOM-Element und emailJQ ist das jQuery-Objekt.

Es gab keine Konsistenz und ich vermischte sie weiter. Außerdem war es ein Ärgernis, immer wieder zwei verschiedene Namen für das gleiche Objekt zu finden: eines für das jQuery-Objekt und eines für das passende DOM-Element. Außerdem email, emailElement, und emailJQIch habe auch andere Variationen probiert.

Dann habe ich ein gemeinsames Muster bemerkt:

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

Da behandelt JavaScript $ als einfach ein weiterer Buchstabe für Namen, und da ich immer ein jQuery-Objekt von einem zurückbekommen habe $(whatever) Ruf, endlich dämmerte mir das Muster. Ich könnte eine nehmen $(...) Rufen Sie an und entfernen Sie einfach einige Zeichen, und es würde einen ziemlich schönen Namen ergeben:

$("#email")
$(email)

Strikeout ist nicht perfekt, aber Sie können die Idee bekommen: mit einigen Buchstaben gelöscht, sehen beide Linien aus wie:

$email

Da wurde mir klar, dass ich keine Konvention wie diese machen musste emailElement oder emailJQ. Es gab schon eine nette Convention, die mich anstarrte: Nimm ein paar Charaktere aus einem $(whatever) rufen Sie an und es wird zu $whatever.

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

und:

// 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!
}

Ich musste also nicht ständig zwei verschiedene Namen zusammenstellen, sondern nur den gleichen Namen mit oder ohne $ Präfix. Und das $ Präfix war eine schöne Erinnerung, dass ich mit einem jQuery-Objekt zu tun hatte:

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

oder:

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

10
2018-02-01 09:05



Das $ -Zeichen hat für die JavaScript-Engine keine besondere Bedeutung. Es ist nur ein anderes gültiges Zeichen in einem Variablennamen wie a-z, A-Z, _, 0-9 usw.


6
2017-07-28 15:26



Schon seit _ am Anfang eines Variablennamens wird oft verwendet, um eine private Variable anzugeben (oder zumindest eine, die privat bleiben soll), finde ich $ praktisch zum Hinzufügen vor meinen eigenen kurzen Aliasen zu generischen Codebibliotheken.

Wenn ich beispielsweise jQuery verwende, verwende ich lieber die Variable $J(statt nur $) und benutzen $P bei der Verwendung von php.js usw.

Das Präfix unterscheidet es visuell von anderen Variablen wie meinen eigenen statischen Variablen, was mich auf die Tatsache hinweist, dass der Code Teil irgendeiner Bibliothek ist und weniger wahrscheinlich ist, andere zu konfligieren oder zu verwirren, sobald sie die Konvention kennen.

Es führt auch nicht zu einer Unordnung des Codes (oder erfordert eine zusätzliche Eingabe), ebenso wie ein vollständig spezifizierter Name, der für jeden Bibliotheksaufruf wiederholt wird.

Ich denke, es ist ähnlich wie die Modifizierungsschlüssel, um die Möglichkeiten einzelner Schlüssel zu erweitern.

Aber das ist nur meine eigene Konvention.


2
2018-05-04 14:52