Kann jemand das Dollarzeichen in Javascript erklären?

378

Der fragliche Code ist hier:

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

Was ist der Zweck des Dollarzeichens im Variablennamen, warum nicht einfach ausschließen?

Keith Donegan
quelle
3
möglich Duplikat stackoverflow.com/questions/205853/...
DisgruntledGoat
Die Antwort von [ttony21] [1] ist falsch und besagt, dass es in Javascript keine Typen gibt, vgl. [offizielle Dokumentation] [2] [1]: stackoverflow.com/questions/846585/… [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam
Dieser Thread ist ziemlich alt, aber es scheint, dass die Mainstream-Browser die globalen Vairables $, $$ standardisiert haben. Was soll $ vs $$ tun?
Nick Sotiros
Nichts, es sei denn, Sie befinden sich in der Konsole des Browsers. Chrome zum Beispiel definiert $ und $$ als Verknüpfungen zu document.querySelectorunddocument.querySelectorAll
Kevin B

Antworten:

381

Ein '$' in einer Variablen bedeutet für den Interpreter nichts Besonderes, ähnlich wie ein Unterstrich.

Wie ich gesehen habe, tendieren viele Leute, die jQuery verwenden (wie Ihr Beispielcode für mich aussieht), dazu, Variablen, die ein jQuery-Objekt enthalten, ein $ voranzustellen, damit sie leicht identifiziert und nicht mit beispielsweise ganzen Zahlen verwechselt werden können .

Die Dollarzeichenfunktion $()in jQuery ist eine häufig verwendete Bibliotheksfunktion, daher ist ein Kurzname wünschenswert.

Cobbal
quelle
86
Hinweis: Standardmäßig verwendet jQuery "$" als Verknüpfung für "jQuery". Dies hat einige Auswirkungen auf die Verwendung anderer Javascript-Bibliotheken. Siehe docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya
17
Mit anderen Worten, $ ist vergleichbar mit jedem akzeptablen Symbol in Variablen- / Funktionsnamen. Tun var $=function(){}ist das gleiche wie tun var a=function(){}.
F-3000
24
Thimmayya Ihr Kommentar "Standardmäßig verwendet jQuery" $ "als Verknüpfung für" jQuery "" sollte in Fettdruck oben auf jeder Seite der Jquery-Website stehen. Ihre Beispiele sind schrecklich dokumentiert.
RustyH
Was ist, wenn $ als Funktionsparameter angegeben wird? Ich betrachte einen Code wie jQuery(document).ready(function($){... Dann wird das $ in der Funktionsimplementierung verwendet.
still_dreaming_1
4
@ ThrowawayAccount3Million Es ist nur ein Teil des Namens. Im Fall von $scope$ ist eines der Zeichen in diesem Namen. So wie Sie das eam Ende abnehmen $scope, wird es nicht funktionieren, so wird das $Abnehmen auch nicht funktionieren. Für den Fall, dass Sie so etwas sehen $( "a" ).addClass( "test" ), ist das Dollarzeichen der gesamte Name dessen, was auch immer das ist.
still_dreaming_1
49

In Ihrem Beispiel hat das $ keine andere besondere Bedeutung als ein Zeichen des Namens.

In ECMAScript 6 (ES6) kann das $ jedoch ein Vorlagenliteral darstellen

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

Das $ -Zeichen ist eine Kennung für Variablen und Funktionen.

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

Das hat eine klare Erklärung dafür, wofür das Dollarzeichen ist.

Hier ist eine alternative Erklärung: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html

AlbertoPL
quelle
2
Javascript hat Typen; und wie hängt das Dollarzeichen überhaupt damit zusammen? Es ist nur ein Zeichen, das zufällig eine legale Kennung in Javascript ist.
Erik Kaplun
10
Ich bin mir nicht sicher, ob ich diesen Link als "klare" Erklärung bezeichnen würde. Sind wirklich mehr als 6 Absätze erforderlich, um zu erklären, dass $ bei der Definition von Funktions- und Variablennamen einfach ein gültiges Zeichen ist?
Leicht
1
Der erste Link funktioniert anscheinend wieder. Ich muss @Slight zustimmen, dass alternative Erklärungen schrecklich sind.
Sander Garretsen
Der Beispielcode im Link ist recht einfach zu verstehen. Genial!
5.
32

Das Dollarzeichen wird wie ein normaler Buchstabe oder Unterstrich behandelt (_ ) behandelt. Es hat für den Dolmetscher keine besondere Bedeutung.

Im Gegensatz zu vielen ähnlichen Sprachen können Bezeichner (wie Funktions- und Variablennamen) in Javascript nicht nur Buchstaben, Zahlen und Unterstriche enthalten, sondern auch Dollarzeichen . Sie dürfen sogar mit einem Dollarzeichen beginnen oder bestehen nur aus einem Dollarzeichen und sonst nichts.

Somit $ist eine gültige Funktion oder ein gültiger Variablenname in Javascript.

Warum sollten Sie ein Dollarzeichen in einer Kennung haben wollen?

Die Syntax erzwingt keine bestimmte Verwendung des Dollarzeichens in einem Bezeichner. Es liegt also an Ihnen, wie Sie es verwenden möchten. In der Vergangenheit wurde häufig empfohlen, einen Bezeichner nur im generierten Code mit einem Dollarzeichen zu beginnen, dh Code , der nicht von Hand, sondern von einem Codegenerator erstellt wurde.

In Ihrem Beispiel scheint dies jedoch nicht der Fall zu sein. Es sieht so aus, als hätte jemand zum Spaß nur ein Dollarzeichen am Anfang angebracht - vielleicht war er ein PHP-Programmierer, der es aus Gewohnheit getan hat, oder so. In PHP müssen alle Variablennamen ein Dollarzeichen vor sich haben.

Heutzutage gibt es in einem Interpreter eine andere gebräuchliche Bedeutung für ein Dollarzeichen: das jQuery-Objekt, dessen Name nur aus einem einzelnen Dollarzeichen besteht ( $). Dies ist eine Konvention, die aus früheren Javascript-Frameworks wie Prototype entlehnt wurde. Wenn jQuery mit anderen solchen Frameworks verwendet wird, kommt es zu einem Namenskonflikt, da beide den Namen verwenden $(jQuery kann so konfiguriert werden, dass für sein globales Objekt ein anderer Name verwendet wird). . In Javascript gibt es nichts Besonderes, das es jQuery ermöglicht, das einzelne Dollarzeichen als Objektnamen zu verwenden. Wie oben erwähnt, ist es einfach nur ein weiterer gültiger Bezeichnername.

thomasrutter
quelle
Sie können das jQuery-Objekt damit nicht in Konflikt bringen, var $j = jQuery.noConflict();jetzt ist $ j das jQuery-Objekt.
Justin Liu vor
6

Das Dollarzeichen wird im Ecmascript 2015-2016 als "Vorlagenliteral" verwendet. Beispiel:

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

Hier Arbeitsbeispiel: https://es6console.com/j3lg8xeo/ Beachten Sie dieses Zeichen " ` ", seine nicht normalen Anführungszeichen.

Sie können $ auch treffen, während Sie mit der Bibliothek jQuery arbeiten .

$ in regulären Ausdrücken anmelden bedeutet Zeilenende.

Vasyl Gutnyk
quelle
4

Kein Grund. Vielleicht kam die Person, die es codiert hat, aus PHP. Es hat den gleichen Effekt, als hätten Sie es "_item" oder "item" oder "item $$" genannt.

Als Suffix (wie "item $", ausgesprochen "items") kann es ein beobachtbares Element wie ein DOM-Element als Konvention mit der Bezeichnung "Finnische Notation" ähnlich der ungarischen Notation bezeichnen.

Claudiu
quelle
1

Hier ist eine gute kurze Video-Erklärung: https://www.youtube.com/watch?v=Acm-MD_6934

Laut Ecma International Identifier Names sind Token, die gemäß der im Abschnitt „Identifiers“ in Kapitel 5 des Unicode-Standards angegebenen Grammatik interpretiert werden , mit einigen kleinen Änderungen. Ein Identifier ist ein IdentifierName, der kein ReservedWord ist ( siehe 7.6.1 ). Die Unicode-Bezeichnergrammatik basiert sowohl auf normativen als auch auf informativen Zeichenkategorien, die im Unicode-Standard festgelegt sind. Die Zeichen in den angegebenen Kategorien in Version 3.0 des Unicode-Standards müssen von allen konformen ECMAScript-Implementierungen wie in diesen Kategorien behandelt werden. Dieser Standard spezifiziert bestimmte Zeichenzusätze:

Das Dollarzeichen ($) und der Unterstrich (_) sind an einer beliebigen Stelle in einem IdentifierName zulässig .

Weitere Informationen finden Sie unter: http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

Ecma International ist ein 1961 gegründeter Branchenverband, der sich der Standardisierung von Informations- und Kommunikationstechnologie (IKT) und Unterhaltungselektronik (CE) widmet.

Nomis
quelle
Während dieser Link die Frage beantworten kann, ist es besser, die wesentlichen Teile der Antwort hier aufzunehmen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert.
TartanLlama
... @TartanLlama Wenn Sie meine Antwort herabgestuft haben, lesen Sie bitte meine aktualisierte Antwort. Vielen Dank.
Nomis
War ich nicht! Ich habe es nur markiert.
TartanLlama
... ok zu der Person, die dies abgelehnt hat, erklären Sie bitte warum und lesen Sie meine bearbeitete Antwort. Vielen Dank.
Nomis
5
... @TartanLlama dies beweist nur (wieder), dass die anonyme Downgrade-Funktion von Stackoverflows defekt ist. Das Beantworten alter Fragen mit akzeptierten Antworten ist für mich in Ordnung, da ich es selbst nützlich finde, andere Antworten zu sehen, wenn ich nach Antworten suche.
Nomis
1

Bei Verwendung von jQuery erfolgt die Verwendung des $Symbols als Präfix im Variablennamen lediglich gemäß Konvention. Es ist vollständig optional und dient nur dazu anzuzeigen, dass die Variable ein jQuery-Objekt enthält, wie in Ihrem Beispiel.

Dies bedeutet, dass Sie eine andere jQuery-Funktion, die für das Objekt aufgerufen werden muss, nicht $()erneut einschließen müssen . Vergleichen Sie zum Beispiel diese:

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

Mit dem $Präfix sind die Variablen, die bereits jQuery-Objekte enthalten, sofort erkennbar und der Code besser lesbar, und Doppel- / Mehrfachumbrüche werden vermieden $().

Haken
quelle