Quelqu'un peut-il expliquer le signe dollar en Javascript?

378

Le code en question est ici:

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

À quoi sert le signe dollar dans le nom de la variable, pourquoi ne pas simplement l'exclure?

Keith Donegan
la source
3
doublon possible de stackoverflow.com/questions/205853/…
DisgruntledGoat
[réponse de ttony21] [1] a tort de dire qu'il n'y a pas de types en Javascript, cf. [documentation officielle] [2] [1]: stackoverflow.com/questions/846585/… [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam
Ce fil est assez ancien mais il semble que les navigateurs traditionnels aient standardisé les vairables globaux $, $$. Que fait $ vs $$?
Nick Sotiros
Rien, sauf si vous êtes dans la console dudit navigateur. Chrome, par exemple, définit $ et $$ comme raccourcis vers document.querySelectoretdocument.querySelectorAll
Kevin B

Réponses:

381

Un «$» dans une variable ne signifie rien de spécial pour l'interpréteur, un peu comme un trait de soulignement.

D'après ce que j'ai vu, de nombreuses personnes utilisant jQuery (à quoi ressemble mon exemple de code) ont tendance à préfixer les variables qui contiennent un objet jQuery avec un $ afin qu'elles soient facilement identifiées et non mélangées, disons, avec des entiers .

La fonction de signe dollar $()dans jQuery est une fonction de bibliothèque qui est fréquemment utilisée, donc un nom court est souhaitable.

cobbal
la source
86
Remarque: Par défaut, jQuery utilise "$" comme raccourci pour "jQuery". Cela a des effets sur l'utilisation d'autres bibliothèques Javascript. Voir docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya
17
En d'autres termes, $ est comparable à tout symbole acceptable dans les noms de variable / fonction. Faire, var $=function(){}c'est comme faire var a=function(){}.
F-3000
24
Thimmayya votre commentaire "Par défaut, jQuery utilise" $ "comme raccourci pour" jQuery "" devrait être en caractères gras en haut de chaque page du site Web de Jquery, Leurs exemples sont horriblement documentés.
RustyH
Qu'en est-il lorsque $ est spécifié en tant que paramètre de fonction? Je regarde du code comme jQuery(document).ready(function($){... Ensuite, le $ est utilisé dans l'implémentation de la fonction.
still_dreaming_1
4
@ ThrowawayAccount3Million C'est juste une partie du nom. Dans le cas du $scope$, c'est l'un des caractères de ce nom. Tout comme si vous décollez eà la fin de $scope, cela ne fonctionnera pas, donc la prise du $testament ne fonctionnera pas non plus. Dans le cas où vous voyez quelque chose comme $( "a" ).addClass( "test" ), le signe dollar est le nom complet de quoi que ce soit.
still_dreaming_1
49

Dans votre exemple, le $ n'a pas de signification particulière autre que d'être un caractère du nom.

Cependant , dans ECMAScript 6 (ES6), le $ peut représenter un modèle littéral

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.
Jusqu'à la crique
la source
37

Le signe $ est un identifiant pour les variables et les fonctions.

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

Cela explique clairement à quoi sert le signe dollar.

Voici une autre explication: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html

AlbertoPL
la source
2
Javascript a des types; et en tout cas, comment le signe dollar est-il même lié à cela? C'est juste un caractère qui se trouve être un identifiant légal en Javascript.
Erik Kaplun
10
Je ne suis pas sûr d'appeler ce lien une explication "claire". Faut-il vraiment plus de 6 paragraphes pour expliquer que $ est simplement un caractère valide lors de la définition des noms de fonction et de variable?
Léger
1
Il semble que le premier lien fonctionne à nouveau. Je suis d'accord avec @Slight que l'explication alternative est terrible.
Sander Garretsen
L'exemple de code dans le lien est assez facile à comprendre. Impressionnant!
蔡宗容
32

Le signe dollar est traité comme une lettre normale ou un trait de soulignement ( _). Cela n'a pas de signification particulière pour l'interprète.

Contrairement à de nombreuses langues similaires, les identifiants (tels que les noms fonctionnels et variables) en Javascript peuvent contenir non seulement des lettres, des chiffres et des traits de soulignement, mais peuvent également contenir des signes dollar . Ils sont même autorisés à commencer par un signe dollar, ou se composent uniquement d'un signe dollar et rien d'autre.

Ainsi, $est une fonction valide ou un nom de variable en Javascript.

Pourquoi voudriez-vous un signe dollar dans un identifiant?

La syntaxe n'applique pas vraiment une utilisation particulière du signe dollar dans un identifiant, c'est donc à vous de décider comment vous souhaitez l'utiliser. Dans le passé, il a souvent été recommandé de commencer un identifiant avec un signe dollar uniquement dans le code généré - c'est-à-dire un code créé non pas à la main mais par un générateur de code.

Dans votre exemple, cependant, cela ne semble pas être le cas. On dirait que quelqu'un vient de mettre un signe dollar au début pour le plaisir - peut-être était-ce un programmeur PHP qui l'a fait par habitude, ou quelque chose du genre. En PHP, tous les noms de variables doivent avoir un signe dollar devant eux.

Il existe un autre sens commun pour un signe dollar dans un interpréteur de nos jours: l'objet jQuery, dont le nom ne se compose que d'un seul signe dollar ( $). Il s'agit d'une convention empruntée aux frameworks Javascript antérieurs comme Prototype, et si jQuery est utilisé avec d'autres frameworks de ce type, il y aura un conflit de noms car ils utiliseront tous les deux le nom $(jQuery peut être configuré pour utiliser un nom différent pour son objet global) . Il n'y a rien de spécial en Javascript qui permette à jQuery d'utiliser le signe dollar unique comme nom d'objet; comme mentionné ci-dessus, il s'agit simplement d'un autre nom d'identifiant valide.

thomasrutter
la source
Vous pouvez noconfliger l'objet jQuery avec ceci var $j = jQuery.noConflict();maintenant $ j est l'objet jQuery.
Justin Liu
6

Le signe dollar est utilisé dans ecmascript 2015-2016 comme `` modèles de littéraux ''. Exemple:

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

Voici un exemple de travail: https://es6console.com/j3lg8xeo/ Notez ce signe " ` ", ce n'est pas des guillemets normaux.

U peut également rencontrer $ tout en travaillant avec la bibliothèque jQuery .

$ sign in Expressions régulières signifie fin de ligne.

Vasyl Gutnyk
la source
4

Sans raison. Peut-être que la personne qui l'a codé venait de PHP. Il a le même effet que si vous l'aviez nommé "_item" ou "item" ou "item $$".

En tant que suffixe (comme "item $", prononcé "items"), il peut signifier un élément observable tel qu'un élément DOM en tant que convention appelée "notation finlandaise" similaire à la notation hongroise.

Claudiu
la source
1

Voici une bonne courte explication vidéo: https://www.youtube.com/watch?v=Acm-MD_6934

Selon Ecma International Identifier, les noms sont des jetons qui sont interprétés selon la grammaire donnée dans la section «Identifiers» du chapitre 5 de la norme Unicode, avec quelques petites modifications. Un identifiant est un identifiant qui n'est pas un mot réservé ( voir 7.6.1 ). La grammaire des identificateurs Unicode est basée sur les catégories de caractères normatives et informatives spécifiées par la norme Unicode. Les caractères des catégories spécifiées dans la version 3.0 de la norme Unicode doivent être traités comme dans ces catégories par toutes les implémentations ECMAScript conformes. Cette norme spécifie des ajouts de caractères spécifiques:

Le signe dollar ($) et le trait de soulignement (_) sont autorisés n'importe où dans un IdentifierName .

De plus amples informations sont disponibles sur: http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

Ecma International est une association industrielle fondée en 1961 et dédiée à la normalisation des technologies de l'information et de la communication (TIC) et de l'électronique grand public (CE).

Nomis
la source
Bien que ce lien puisse répondre à la question, il est préférable d'inclure les parties essentielles de la réponse ici et de fournir le lien de référence. Les réponses de lien uniquement peuvent devenir invalides si la page liée change.
TartanLlama
... @TartanLlama Si vous avez rétrogradé ma réponse, veuillez lire ma réponse mise à jour. Je vous remercie.
Nomis
Ce n'était pas moi! Je viens de le signaler.
TartanLlama
... ok à la personne qui a voté contre, veuillez expliquer pourquoi et lire ma réponse modifiée. Je vous remercie.
Nomis
5
... @TartanLlama cela prouve (encore une fois) que la fonction de downgrade anonyme de Stackoverflows est cassée. Répondre à d'anciennes questions avec des réponses acceptées me convient, car je trouve moi-même utile de voir d'autres réponses lorsque je cherche des réponses.
Nomis
1

Lors de l'utilisation de jQuery, l'utilisation du $symbole comme préfixe dans le nom de variable se fait simplement par convention; il est complètement facultatif et sert uniquement à indiquer que la variable contient un objet jQuery, comme dans votre exemple.

Cela signifie que lorsqu'une autre fonction jQuery doit être appelée sur l'objet, vous n'avez pas besoin de l'envelopper à $()nouveau. Par exemple, comparez-les:

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

Avec le $préfixe, les variables contenant déjà des objets jQuery sont instantanément reconnaissables et le code plus lisible, et élimine le double / multiple wrapping avec $().

Accroc
la source