Question

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

(Je ne parle pas de la syntaxe $ ('p.foo') que vous voyez dans jQuery et autres, mais de variables normales comme $ name et $ order )

Était-ce utile?

La solution

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 l'écriture de code jQuery et permet de voir facilement les objets jQuery ayant un ensemble de propriétés différent.

Autres conseils

Dans les 1er, 2ème et 3e édition d’ECMAScript , l’utilisation de noms de variables avec un préfixe $ a été explicitement déconseillée par la spécification, sauf dans le contexte du code généré automatiquement:

  

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

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

  

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

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

Comme d'autres l'ont mentionné, le signe dollar est destiné à être utilisé par du 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 sous forme d'identifiant complet).

En bref, vous pouvez utiliser le $ à tout moment. (L’interprète ne se plaindra pas.) La question est de savoir quand voulez-vous l’utiliser?

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

Par exemple:

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

Cela semble être une convention raisonnable.

Dans le contexte d’AngularJS, le préfixe $ n’est utilisé que pour les identifiants dans le code de la structure. Les utilisateurs de la structure sont priés de ne pas l'utiliser dans leurs propres identifiants:

  

Espaces de nommage angulaires $ et $$

     

Pour éviter les collisions de nom accidentelles avec votre code, les préfixes angulaires des noms d'objets publics avec $ et les noms d'objets privés avec $$ . N'utilisez pas le préfixe $ ou $$ dans votre code.

Source: https://docs.angularjs.org/api

J’ai été à l’origine de cette convention en 2006 et en ai fait la promotion sur la liste de diffusion jQuery, laissez-moi vous raconter une partie de son histoire et de sa motivation.

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. Même sans $ , nous aurions toujours deux noms de variable différents, email et email_field . C'est beaucoup bien ici. Pourquoi devrions-nous jeter 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 du code JavaScript idiomatique et le champ ne contient pas logique pour un élément DOM. Mais j'ai suivi la même idée.

J'ai essayé différentes choses, parmi lesquelles 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 entendu, un objet jQuery peut avoir plusieurs éléments DOM, mais le code sur lequel je travaillais comportait de nombreux sélecteurs id , de sorte que dans ces cas, la correspondance était 1: 1. )

J'ai eu un autre cas où une fonction recevait 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 bits de code, email est l'objet jQuery et emailElement est l'élément DOM, mais dans l'autre, email est le DOM. element 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, il était un peu gênant de devoir créer 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 également essayé d'autres variantes.

Ensuite, j'ai remarqué un schéma commun:

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

Puisque JavaScript traite $ comme une simple lettre pour les noms, et comme j'ai toujours reçu un objet jQuery à partir d'un appel $ (peu importe) , le modèle finalement apparu moi. Je pourrais prendre un appel $ (...) et juste enlever quelques caractères, et cela donnerait un très joli nom:

$("#email")
$(email)

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

$email

C'est à ce moment-là que j'ai réalisé que je n'avais pas besoin de créer une convention telle que emailElement ou emailJQ . Il y avait déjà une belle convention qui me fixait: retirez quelques caractères d'un appel $ (peu importe) et cela deviendrait $ peu importe .

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

Je n'ai donc pas à inventer deux noms différents tout le temps, mais je peux simplement utiliser le même nom avec ou sans préfixe $ . Et le préfixe $ rappelait gentiment que j’avais affaire à un objet jQuery:

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

ou:

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

Stevo a raison, la signification et l’utilisation du signe dollar (en Javascript et sur la plate-forme jQuery, mais pas en PHP) est totalement sémantique. $ est un caractère qui peut être utilisé dans le cadre d'un nom d'identifiant. De plus, le signe dollar n’est peut-être pas le plus "étrange". chose que vous pouvez rencontrer en Javascript. Voici quelques exemples 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 $$<*>quot;); }

Tous les exemples ci-dessus fonctionneront.

Essayez-les.

Le caractère $ n'a aucune 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 ...

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

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

Le préfixe le distingue visuellement des autres variables, telles que mes propres variables statiques, ce qui me permet de comprendre le fait que le code fait partie d'une bibliothèque ou d'une autre et qu'il est moins susceptible de créer des conflits ou de confondre les autres une fois qu'ils connaissent la convention.

Cela n’encombrera pas non plus le code (ni ne nécessitera une frappe supplémentaire) comme le nom complet spécifié répété pour chaque appel à la bibliothèque.

J'aime penser que cela ressemble à ce que font les touches de modification pour élargir les possibilités des touches uniques.

Mais ceci est juste ma propre convention.

Comme je le constate depuis 4 ans, cela permettra à quelqu'un d'identifier facilement si la variable pointant vers une valeur / un objet ou un élément DOM encapsulé dans jQuery

Ex:
var name = 'jQuery';
var lib = {name:'jQuery',version:1.6};

var $dataDiv = $('#myDataDiv');

dans l'exemple ci-dessus lorsque je vois la variable " $ dataDiv " Je peux facilement dire que cette variable pointant sur un élément DOM enveloppé dans jQuery (dans ce cas, il est div). et aussi je peux appeler toutes les méthodes jQuery sans envelopper l’objet à nouveau comme $ dataDiv.append (), $ dataDiv.html (), $ dataDiv.find () au lieu de $ ($ dataDiv) .append ().

J'espère que cela peut aider. alors enfin, je veux dire que ce sera une bonne pratique de suivre cela, mais pas obligatoire.

Bien que vous puissiez simplement l'utiliser pour préfixer vos identificateurs, il est censé être utilisé pour le code généré, tel que les jetons de remplacement dans un modèle, par exemple.

$ {varname} est simplement une convention de dénomination que les développeurs jQuery utilisent pour distinguer les variables qui contiennent des éléments jQuery.

Plain {varname} est utilisé pour stocker des éléments généraux tels que des textes et des chaînes. $ {varname} contient les éléments renvoyés par jQuery.

Vous pouvez utiliser plain {varname} pour stocker des éléments jQuery également, mais comme je l’ai dit au début, cela le distingue des variables simples et le rend beaucoup plus facile à comprendre (imaginez-le confus pour une simple variable et en cherchant partout pour comprendre ce qu’elle contient).

Par exemple:

var $blah = $(this).parents('.blahblah');

Ici, blah stocke un élément jQuery renvoyé.

Ainsi, lorsque quelqu'un verra le $ blah dans le code, il comprendra que ce n'est pas simplement une chaîne ou un nombre, c'est un élément jQuery.

Angular est utilisé pour les propriétés générées par le cadre. Devinez, ils se fient à l'indication (maintenant disparue) fournie par l'ECMA-262 3.0.

$ est utilisé pour distinguer entre les variables communes et les variables jquery dans le cas de variables normales. vous permettent de placer une commande dans FLIPKART, puis, si la commande est une variable indiquant la sortie de chaîne, elle est simplement nommée "ordre". mais si nous cliquons sur une commande alors un objet est retourné, cet objet sera désigné par $ as " $ order " afin que le programmeur puisse extraire les variables javascript et jquery du code entier.

Si vous voyez le signe dollar ($) ou le double signe dollar ($$) et êtes curieux de savoir ce que cela signifie dans le cadre du prototype, voici votre réponse:

$('div');
// -> all DIVs in the document.  Same as document.getElementsByTagName('div')!

$('#contents');
// -> same as $('contents'), only it returns an array anyway (even though IDs must be unique within a document).

$('li.faux');
// -> all LI elements with class 'faux'

Source:
http://www.prototypejs.org/api/utility/dollar-dollar

La raison pour laquelle j'utilise parfois les conventions de noms php avec des variables javascript: Lors de la validation des entrées, je veux exécuter les mêmes algorithmes côté client, et côté serveur. Je souhaite vraiment que les deux côtés du code soient aussi similaires que possible, afin de simplifier la maintenance. L'utilisation de signes dollar dans les noms de variables facilite les choses.

(En outre, certaines fonctions d'aide judicieuses permettent de rendre le code similaire, par exemple, en encapsulant des recherches de valeur d'entrée, des versions non-OO de strlen, substr, etc. Il nécessite néanmoins quelques ajustements manuels cependant.)

Un identifiant JavaScript valide shuold doit commencer par une lettre,     trait de soulignement (_) ou signe dollar ($);    les personnages suivants peuvent aussi     être des chiffres (0-9). Parce que JavaScript est sensible à la casse,     des lettres     inclure les caractères " A " à travers " Z " (majuscule) et le     caractères " a " à travers " z " (minuscule).

Détails:
https://developer.mozilla.org/en-US / docs / Web / JavaScript / Guide / Grammar_and_types # Variables

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top