Qualcuno può spiegare il simbolo del dollaro in Javascript?


378

Il codice in questione è qui:

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

Qual è lo scopo del simbolo del dollaro nel nome della variabile, perché non escluderlo?



[la risposta di ttony21] [1] ha torto affermando che non ci sono tipi in Javascript, cfr. [documentazione ufficiale] [2] [1]: stackoverflow.com/questions/846585/... [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam

Questo thread è piuttosto vecchio ma sembra che i browser mainstream abbiano standardizzato i vendibili globali $, $$. Che cosa dovrebbe fare $ vs $$?
Nick Sotiros,

Niente, a meno che tu non sia nella console di detto browser. Chrome ad esempio definisce $ e $$ come scorciatoie per document.querySelectoredocument.querySelectorAll
Kevin B

Risposte:


381

Un '$' in una variabile non significa niente di speciale per l'interprete, proprio come un trattino basso.

Da quello che ho visto, molte persone che usano jQuery (che è quello che mi assomiglia il tuo codice di esempio) tendono a mettere in prefisso le variabili che contengono un oggetto jQuery con $ in modo che possano essere facilmente identificate e non confuse con, diciamo, numeri interi .

La funzione del simbolo del dollaro $()in jQuery è una funzione di libreria utilizzata frequentemente, quindi è auspicabile un nome breve.


86
Nota: per impostazione predefinita, jQuery utilizza "$" come collegamento per "jQuery". Ciò ha alcuni effetti sull'uso di altre librerie Javascript. Vedi docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya

17
In altre parole, $ è paragonabile a qualsiasi simbolo accettabile nei nomi di variabili / funzioni. Fare var $=function(){}è molto simile a fare var a=function(){}.
F-3000,

24
Thimmayya il tuo commento "Per impostazione predefinita, jQuery usa" $ "come scorciatoia per" jQuery "" dovrebbe essere in grassetto nella parte superiore di ogni pagina del sito Web di Jquery, i loro esempi sono orribilmente documentati.
RustyH

Che dire di quando $ è specificato come parametro di funzione? Sto osservando un codice come jQuery(document).ready(function($){... Quindi $ viene utilizzato all'interno dell'implementazione della funzione.
still_dreaming_1

4
@ ThrowawayAccount3Million È solo una parte del nome. Nel caso di $scope$ è uno dei caratteri con quel nome. Proprio come se decollassi ealla fine di $scope, non funzionerà, quindi anche prendere la $volontà non funzionerà. Nel caso in cui vedi qualcosa del genere $( "a" ).addClass( "test" ), il simbolo del dollaro è l'intero nome di qualunque cosa sia.
still_dreaming_1

49

Nel tuo esempio $ non ha alcun significato speciale se non quello di essere un personaggio del nome.

Tuttavia , in ECMAScript 6 (ES6) $ può rappresentare un modello letterale

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

37

Il simbolo $ è un identificatore per variabili e funzioni.

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

Questo ha una chiara spiegazione di cosa serve il simbolo del dollaro.

Ecco una spiegazione alternativa: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html


2
Javascript ha tipi; e in ogni caso, in che modo il simbolo del dollaro è anche collegato a quello? È solo un personaggio che sembra essere un identificatore legale in Javascript.
Erik Kaplun,

10
Non sono sicuro che chiamerei quel link una spiegazione "chiara". Ci vogliono davvero 6+ paragrafi per spiegare che $ è semplicemente un carattere valido quando si definiscono nomi di funzioni e variabili?
Leggero

1
Sembra che il primo link funzioni di nuovo. Sono d'accordo con @Slight che la spiegazione alternativa è terribile.
Sander Garretsen,

Il codice di esempio nel collegamento è abbastanza facile da capire. Eccezionale!
蔡宗容

32

Il simbolo del dollaro viene trattato come una normale lettera o trattino basso ( _). Non ha alcun significato speciale per l'interprete.

A differenza di molte lingue simili, gli identificatori (come nomi funzionali e variabili) in Javascript possono contenere non solo lettere, numeri e caratteri di sottolineatura, ma possono anche contenere segni di dollaro . Sono anche autorizzati a iniziare con un simbolo di dollaro o consistono solo di un simbolo di dollaro e nient'altro.

Pertanto, $è una funzione valida o un nome di variabile in Javascript.

Perché vorresti un segno di dollaro in un identificatore?

La sintassi non impone alcun uso particolare del simbolo del dollaro in un identificatore, quindi dipende da te come desideri utilizzarlo. In passato, è stato spesso raccomandato di avviare un identificatore con un simbolo di dollaro solo nel codice generato , ovvero codice creato non a mano ma da un generatore di codice.

Nel tuo esempio, tuttavia, questo non sembra essere il caso. Sembra che qualcuno abbia appena messo un simbolo del dollaro all'inizio per divertimento - forse erano un programmatore PHP che lo ha fatto per abitudine, o qualcosa del genere. In PHP, tutti i nomi delle variabili devono avere davanti un segno di dollaro.

C'è un altro significato comune per un segno di dollaro in un interprete al giorno d'oggi: l'oggetto jQuery, il cui nome è costituito solo da un singolo simbolo di dollaro ( $). Questa è una convenzione presa in prestito da precedenti framework Javascript come Prototype e se jQuery viene utilizzato con altri framework di questo tipo, si verificherà uno scontro di nomi poiché entrambi useranno il nome $(jQuery può essere configurato per utilizzare un nome diverso per il suo oggetto globale) . Non c'è nulla di speciale in Javascript che consente a jQuery di usare il singolo simbolo del dollaro come nome dell'oggetto; come menzionato sopra, è semplicemente solo un altro nome identificativo valido.


È possibile annullare il conflitto dell'oggetto jQuery con questo var $j = jQuery.noConflict();ora $ j è l'oggetto jQuery.
Justin Liu, il

6

Il simbolo del dollaro è utilizzato in ecmascript 2015-2016 come "template letterali". Esempio:

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

Qui esempio funzionante: https://es6console.com/j3lg8xeo/ Notare questo segno " ` ", le sue virgolette non normali.

Puoi anche incontrare $ mentre lavori con la libreria jQuery .

$ sign in Regular Expressions significa end of line.


4

Nessuna ragione. Forse la persona che l'ha codificata proviene da PHP. Ha lo stesso effetto di se lo avessi chiamato "_item" o "item" o "item $$".

Come suffisso (come "item $", pronunciato "items"), può significare un osservabile come un elemento DOM come una convenzione chiamata "Notazione finlandese" simile alla notazione ungherese.


1

Ecco una buona breve spiegazione video: https://www.youtube.com/watch?v=Acm-MD_6934

Secondo Ecma International Identifier i nomi sono token che vengono interpretati secondo la grammatica indicata nella sezione "Identificatori" del capitolo 5 dello standard Unicode, con alcune piccole modifiche. Un identificatore è un identificativo che non è un riservatoWord ( vedi 7.6.1 ). La grammatica dell'identificatore Unicode si basa su categorie di caratteri sia normative sia informative specificate dallo standard Unicode. I caratteri nelle categorie specificate nella versione 3.0 dello standard Unicode devono essere trattati come in tali categorie da tutte le implementazioni ECMAScript conformi. Questo standard specifica aggiunte di caratteri specifici:

Il simbolo del dollaro ($) e il trattino basso (_) sono consentiti ovunque in un IdentifierName .

Ulteriori letture sono disponibili su: http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

Ecma International è un'associazione industriale fondata nel 1961 e dedicata alla standardizzazione delle tecnologie dell'informazione e della comunicazione (TIC) e dell'elettronica di consumo (CE).


Sebbene questo collegamento possa rispondere alla domanda, è meglio includere qui le parti essenziali della risposta e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia.
TartanLlama,

... @TartanLlama Se hai declassato la mia risposta, leggi la mia risposta aggiornata. Grazie.
Nomis,

Non sono stato io! L'ho appena segnalato.
TartanLlama,

... ok per la persona che ha votato in negativo, per favore spiega perché e leggi la mia risposta modificata. Grazie.
Nomis,

5
... @TartanLlama questo dimostra (di nuovo) che la funzionalità di downgrade anonimo di Stackoverflow è interrotta. Rispondere a vecchie domande con risposte accettate è ok per me poiché trovo utile vedere altre risposte quando cerco le risposte.
Nomis,

1

Quando si utilizza jQuery, l'uso del $simbolo come prefisso nel nome della variabile è semplicemente per convenzione; è completamente facoltativo e serve solo per indicare che la variabile contiene un oggetto jQuery, come nel tuo esempio.

Ciò significa che quando è necessario richiamare un'altra funzione jQuery sull'oggetto, non è necessario inserirlo $()nuovamente. Ad esempio, confronta questi:

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

Con il $prefisso le variabili che già contengono oggetti jQuery sono immediatamente riconoscibili e il codice più leggibile, eliminando il doppio / multiplo wrapping $().

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.