Question Pourquoi une variable JavaScript commence-t-elle par un signe dollar?


Je vois assez souvent JavaScript avec des variables qui commencent par un signe dollar. Quand / pourquoi choisiriez-vous de préfixer une variable de cette manière?

(Je ne demande pas à propos de $('p.foo') syntaxe que vous voyez dans jQuery et d'autres, mais des variables normales comme $name et $order)


906
2017-10-15 18:26


origine


Réponses:


Une utilisation très courante dans jQuery consiste à distinguer les objets jQuery stockés dans des variables d'autres variables. Par exemple, je définirais

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

Je trouve cela très utile pour écrire du code jQuery et il est facile de voir les objets jQuery qui ont un ensemble de propriétés différent.


1268
2018-02-16 15:42



Au 1er, 2e et 3ème édition d'ECMAScript, l'utilisation de noms de variables $ -prefixed a été explicitement découragée par la spécification sauf dans le contexte du code généré automatiquement:

Le signe du dollar ($) et le trait de soulignement (_) sont autorisés n'importe où dans un identifiant. Le signe dollar est destiné à être utilisé uniquement dans le code généré mécaniquement.

Cependant, dans la prochaine version (le 5ème édition, ce qui est courant), cette restriction a été supprimée, et le passage ci-dessus remplacé par

Le signe du dollar ($) et le trait de soulignement (_) sont autorisés partout dans un IdentifierName.

En tant que tel, le signe $ peut maintenant être utilisé librement dans les noms de variables. Certains frameworks et bibliothèques ont leurs propres conventions sur la signification du symbole, notées dans d'autres réponses ici.


220
2017-10-15 18:59



Comme d'autres l'ont mentionné, le symbole dollar est destiné à être utilisé par un code généré mécaniquement. Cependant, cette convention a été brisée par certaines bibliothèques JavaScript très populaires. JQuery, Prototype et MS AJAX (AKA Atlas) utilisent tous ce caractère dans leurs identifiants (ou comme identifiant entier).

En bref, vous pouvez utiliser le $ quand tu veux. (L'interprète ne se plaindra pas.) La question est de savoir quand vouloir pour l'utiliser?

Personnellement, je ne l'utilise pas, mais je pense que son utilisation est valide. Je pense que MS AJAX l'utilise pour signifier qu'une fonction est un alias pour un appel plus verbeux.

Par exemple:

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

Cela semble être une convention raisonnable.


56
2017-10-15 22:57



Dans le contexte d'AngularJS, le $ Le préfixe est utilisé uniquement pour les identifiants dans le code du framework. Les utilisateurs du framework ont ​​pour instruction de ne pas l'utiliser dans leurs propres identifiants:

Espaces de noms angulaires $ et $$

Pour éviter les collisions de noms accidentelles avec votre code, Angular préfixe les noms des objets publics avec $ et les noms des objets privés avec $$. S'il vous plaît ne pas utiliser le $ ou $$ préfixe dans votre code.

La source: https://docs.angularjs.org/api


49
2017-08-30 22:51



Stevo a raison, la signification et l'utilisation du signe de script dollar (en Javascript et sur la plateforme jQuery, mais pas en PHP) est complètement sémantique. $ est un caractère qui peut être utilisé dans le cadre d'un nom d'identifiant. En outre, le signe du dollar n'est peut-être pas la chose la plus "bizarre" que vous pouvez rencontrer en Javascript. Voici quelques exemples de noms d'identifiants valides:

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

Tous les exemples ci-dessus fonctionneront.

Essayez les.


19
2017-08-08 00:34



J'étais la personne à l'origine de cette convention en 2006 et je l'ai promue sur la liste de diffusion jQuery, alors permettez-moi de partager une partie de l'histoire et de la motivation qui l'entoure.

La réponse acceptée donne cet exemple:

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

Mais cela ne l'illustre pas vraiment bien. Même sans le $, nous aurions toujours deux noms de variables différents ici, email et email_field. C'est très bien ici. Pourquoi devrions-nous jeter un $ dans l'un des noms quand nous avons déjà deux noms différents?

En fait, je n'aurais pas utilisé email_field ici pour deux raisons: names_with_underscores ne sont pas idiomatiques JavaScript, et field n'a pas vraiment de sens pour un élément DOM. Mais j'ai suivi la même idée.

J'ai essayé quelques choses différentes, parmi elles quelque chose de très similaire à l'exemple:

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

(Bien sûr, un objet jQuery peut avoir plus d'un élément DOM, mais le code sur lequel je travaillais avait beaucoup de id sélecteurs, donc dans ces cas, il y avait une correspondance 1: 1.)

J'ai eu un autre cas où une fonction a reçu un élément DOM en tant que paramètre et avait également besoin d'un objet jQuery pour cela:

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

Eh bien, c'est un peu déroutant! Dans l'un de mes morceaux de code, email est l'objet jQuery et emailElement est l'élément DOM, mais dans l'autre, email est l'élément DOM et emailJQ est l'objet jQuery.

Il n'y avait pas de cohérence et je continuais à les mélanger. De plus, c'était un peu gênant de continuer à avoir deux noms différents pour la même chose: un pour l'objet jQuery et un autre pour l'élément DOM correspondant. outre email, emailElement, et emailJQ, J'ai continué à essayer d'autres variations aussi.

Puis j'ai remarqué un schéma commun:

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

Depuis les friandises JavaScript $ comme une simple lettre pour les noms, et comme j'ai toujours reçu un objet jQuery d'un $(whatever) appelez, le motif a enfin commencé à apparaître sur moi. Je pourrais prendre un $(...) appelez et supprimez juste quelques caractères, et il trouverait un joli nom gentil:

$("#email")
$(email)

Strikeout n'est pas parfait, mais vous pouvez avoir l'idée: avec certains caractères supprimés, ces deux lignes finissent par ressembler à:

$email

C'est alors que j'ai réalisé que je n'avais pas besoin de créer une convention comme emailElement ou emailJQ. Il y avait déjà une belle convention qui me regardait: prendre des personnages sur un $(whatever) appeler et il se transforme en $whatever.

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

et:

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

Donc je n'ai pas eu à faire deux noms différents tout le temps mais je pouvais juste utiliser le même nom avec ou sans $ préfixe. Et le $ Le préfixe était un bon rappel que j'avais affaire à un objet jQuery:

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

ou:

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

10
2018-02-01 09:05



Le caractère $ n'a pas de signification particulière pour le moteur JavaScript. C'est juste un autre caractère valide dans un nom de variable comme a-z, A-Z, _, 0-9, etc ...


6
2017-07-28 15:26



Depuis _ au début d'un nom de variable est souvent utilisé pour indiquer une variable privée (ou au moins un destiné à rester privé), je trouve $ pratique pour ajouter devant mes propres pseudonymes aux bibliothèques de code génériques.

Par exemple, lorsque j'utilise jQuery, je préfère utiliser la variable $J(au lieu de simplement $) et utilise $P lors de l'utilisation de php.js, etc.

Le préfixe le rend visuellement distinct des autres variables telles que mes propres variables statiques, me clouant dans le fait que le code fait partie d'une bibliothèque ou autre, et est moins susceptible de gêner ou de dérouter les autres une fois qu'ils connaissent la convention.

Il n'encombre pas non plus le code (ou nécessite une saisie supplémentaire) comme le fait un nom entièrement spécifié répété pour chaque appel de bibliothèque.

J'aime penser à cela comme étant similaire à ce que les touches de modification permettent d'étendre les possibilités des touches individuelles.

Mais ceci est juste ma propre convention.


2
2018-05-04 14:52