C'est moi qui ai été à l'origine de cette convention en 2006 et qui en ai fait la promotion sur la première liste de diffusion jQuery. Permettez-moi donc de vous faire part de l'histoire et de la motivation qui l'entourent.
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 n'illustre pas vraiment bien la situation. Même sans le $
nous aurions toujours deux noms de variables différents, email
y email_field
. C'est très bien comme ça. Pourquoi aurions-nous besoin de lancer un $
dans l'un des noms alors que 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 du 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é plusieurs choses différentes, dont 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-là, il y avait une correspondance 1:1).
J'ai eu un autre cas où une fonction recevait un élément DOM comme paramètre et avait également besoin d'un objet jQuery pour celui-ci :
// 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 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 n'arrêtais pas de les mélanger. De plus, c'était un peu gênant de devoir inventer deux noms différents pour la même chose : un pour l'objet jQuery et un autre pour l'élément DOM correspondant. En plus de email
, emailElement
et emailJQ
J'ai continué à essayer d'autres variations.
Puis j'ai remarqué un modèle commun :
var email = $("#email");
var emailJQ = $(email);
Puisque JavaScript traite $
comme une lettre de plus pour les noms, et puisque j'ai toujours reçu un objet jQuery en retour d'une commande $(whatever)
appel, le motif m'a finalement sauté aux yeux. Je pourrais prendre un $(...)
en supprimant quelques caractères, et on obtiendrait un nom plutôt sympa :
$("#email")
Strikeout n'est pas parfait, mais vous pouvez avoir l'idée : avec quelques caractères supprimés, ces deux lignes finissent par ressembler à :
$email
C'est là que j'ai réalisé que je n'avais pas besoin d'inventer une convention du genre emailElement
o emailJQ
. Il y avait déjà une belle convention qui s'offrait à moi : prendre quelques personnages d'un $(whatever)
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!
}
Ainsi, je n'ai pas eu à inventer deux noms différents tout le temps, mais j'ai pu utiliser le même nom, avec ou sans un $
préfixe. Et 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( ... );
22 votes
C'est probablement une habitude prise lors de la programmation en Perl. (edit : ou PHP)
8 votes
Certains langages l'exigent, comme PHP ou Perl. Je suppose que le développeur n'a pas oublié que ce n'est pas nécessaire en javascript.
3 votes
Ou ils ne voulaient pas se donner la peine d'abandonner cette habitude. C'est très probablement la bonne réponse, car de nombreux développeurs qui créent leur propre page Web le font en utilisant PHP et javascript.
3 votes
@DonaldDuck Je pense que vous avez peut-être vos doublons dans le mauvais sens - ceci est 7 mois plus vieux que votre lien.
2 votes
@Ken Selon cette réponse Ce n'est pas l'âge qui compte, mais la qualité des réponses. Personnellement, je pense que les réponses à l'autre question sont meilleures, c'est pourquoi j'ai voté pour fermer cette question en tant que doublon. Si vous pensez que les réponses à cette question sont meilleures, vous pouvez voter pour que l'autre question soit considérée comme un doublon.
0 votes
Je suis l'un de ces types qui "bricolent" des pages web et j'utilise $variable en javascript parce que j'ai appris le php bien avant d'apprendre le javascript. Et il ne s'agit pas d'abandonner cette habitude, pour moi, il s'agit de faire en sorte que mon code JS soit lisible d'un seul coup d'œil. Si je regarde un code qui n'utilise pas de signes de dollar, il est beaucoup plus lent à traiter pour mon cerveau. En résumé, cela rend mon code agréable, lisible et cohérent entre les deux langages que j'utilise en permanence.