Pourquoi une variable JavaScript commencer par un signe dollar?
J'ai assez souvent voir JavaScript avec des variables qui commencent par un signe dollar. Quand/pourquoi choisiriez-vous de faire précéder une variable de cette façon?
(Je ne suis pas de demander à propos de $('p.foo')
de la syntaxe que vous voyez en jQuery et d'autres, mais c'est normal, des variables comme $name
et $order
)
- C'est probablement une habitude ramassé de programmation Perl. (edit: ou PHP)
- Certaines langues ont besoin, tels que le PHP ou Perl - je suppose que les dev ne me souviens pas qu'il n'est pas nécessaire en javascript.
- ou qu'ils ne veulent pas être pris la peine de déposer l'habitude. Ceci est probablement la bonne réponse, puisque de nombreux développeurs qui hack leur propre page web, le faire à l'aide de PHP et de javascript.
- Double Possible de quelqu'un Peut m'expliquer le signe de dollar en Javascript?
- Je pense que vous pourriez avoir vos copies dans le mauvais sens - c'est 7 mois de plus que votre lien
- Selon cette réponse, ce n'est pas l'âge qui compte mais la qualité, les réponses sont. Personnellement, je pense que les réponses à la question sont mieux, ce qui est pourquoi j'ai voté pour fermer celui-ci comme un doublon. Si vous pensez que les réponses à celui-ci sont mieux, vous pouvez voter pour fermer l'autre comme un double.
- Comme l'un de ces gars 'piratage' ensemble des pages web, j'utilise $variable en javascript parce que j'ai appris le php longtemps avant que j'ai appris le javascript. Et il n'est pas sur la suppression de la habbit, pour moi, c'est d'avoir mon code JS être lisible en un coup d'œil. Si je suis à la recherche d'un code qui n'utilise pas les signes dollar, c'est beaucoup plus lent pour mon cerveau de processus. Donc la version courte de ce qui est, il rend mon code de nice et lisible et cohérente entre les deux langues que j'utilise tout le temps.
Vous devez vous connecter pour publier un commentaire.
D'un usage très courant dans jQuery est à distinguer de jQuery objets stockés dans des variables à partir d'autres variables. Par exemple, je voudrais définir
Je trouve cela très utiles dans l'écriture de jQuery code et le rend facile à voir jQuery objets qui ont un ensemble différent de propriétés.
function() { ..... }
qui avez-vous proposé?var foo = function() { ..... }
OUvar $foo = function() { ..... }
smallIllustration
n'est pas aussi mauvais dans une police serif. De toute façon vous avez raison sur un point: ce nom aspire à dos de chameau cas. Pourquoi ne pas juste le nom de la chose différemment? illustrationSmall, tinyIllustration, smallPicture, que ce soit faire preuve de créativité 🙂Dans les 1ère, 2ème, et 3e Édition de l'ECMAScript, à l'aide de $préfixe des noms de variables a été explicitement découragés par la spec, sauf dans le contexte du code généré automatiquement:
Cependant, dans la prochaine version (la 5ème Édition, qui est en cours), cette restriction a été supprimée, et le passage ci-dessus remplacé par
En tant que tel, le signe " $ " peut maintenant être utilisé librement dans les noms de variable. Certains cadres et les bibliothèques ont leurs propres conventions sur la signification du symbole, a noté dans d'autres réponses ici.
$variable
, c'est probablement parce qu'il contient la totalité d'un objet jQuery.Que d'autres ont mentionné le signe dollar est destiné à être utilisé par mécaniquement le code généré. Toutefois, cette convention a été brisé par quelques très populaire dans les bibliothèques JavaScript. JQuery, Prototype et MS AJAX (AKA Atlas) toute utilisation de ce caractère dans leurs identifiants (ou comme un ensemble d'identifiant).
En bref, vous pouvez utiliser le
$
quand vous le souhaitez. (L'interprète de ne pas se plaindre.) La question est de savoir quand avez-vous voulez pour l'utiliser?Personnellement je ne l'utilise pas, mais je pense que son utilisation est valide. Je pense que MS AJAX utilise pour indiquer qu'une fonction est un alias pour un peu plus détaillé de l'appel.
Par exemple:
Qui semble raisonnable convention.
Dans le contexte de AngularJS, la
$
préfixe est utilisé uniquement pour les identifiants dans le cadre du code. Les utilisateurs sont avisés de ne pas l'utiliser dans leurs propres identifiants:Source: https://docs.angularjs.org/api
J'étais la personne à l'origine de la présente convention en 2006 et en a fait la promotion sur le début de jQuery liste, donc permettez-moi de partager un peu de l'histoire et de la motivation autour d'elle.
La accepté de répondre donne cet exemple:
Mais qui n'a pas vraiment d'illustrer, c'est bien. Même sans le
$
, nous aurions toujours deux noms de variables ici,email
etemail_field
. C'est beaucoup de bon là. Pourquoi nous avons besoin de jeter un$
dans l'un des noms 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 JavaScript, etfield
n'a pas vraiment de sens pour un élément du DOM. Mais j'ai fait suivre la même idée.J'ai essayé plusieurs choses différentes, parmi eux, quelque chose de très similaire à l'exemple:
(Bien sûr, un objet jQuery peut avoir plus d'un élément du DOM, mais le code je travaillais sur eu beaucoup de
id
sélecteurs, donc dans ces cas, il y a une correspondance 1:1.)J'ai eu un autre cas où une fonction a reçu un élément du DOM en tant que paramètre et avaient besoin d'un objet jQuery pour elle:
Eh bien, c'est un peu déroutant! Dans l'un de mes morceaux de code,
email
est l'objet jQuery etemailElement
est l'élément du DOM, mais dans l'autre,email
est l'élément DOM etemailJQ
est l'objet jQuery.Il n'y avait pas d'uniformité et j'ai continué à mélanger jusqu'. En Plus, c'était un peu une nuisance pour garder d'avoir à faire deux noms différents pour la même chose: l'un pour l'objet jQuery et un autre pour la mise en correspondance de l'élément DOM. En outre
email
,emailElement
, etemailJQ
, j'ai continué d'essayer d'autres variantes de trop.Puis j'ai remarqué un modèle commun:
Depuis JavaScript traite
$
simplement comme une autre lettre pour les noms, et depuis j'ai toujours eu un objet jQuery arrière à partir d'un$(whatever)
appel, le modèle enfin levé sur moi. Je pourrais prendre une$(...)
appel et simplement supprimer certains caractères, et qu'il viendrait avec un très joli nom:Barré n'est pas parfait, mais vous pouvez obtenir l'idée: avec certains personnages effacés, ces deux lignes finissent par ressembler à:
C'est quand j'ai réalisé que je n'avais pas besoin de faire une convention comme
emailElement
ouemailJQ
. Il y avait déjà un congrès de nice à me regarder: prendre certains caractères d'un$(whatever)
appel et il se transforme en$whatever
.et:
Donc je n'ai pas eu à faire jusqu'à deux noms différents tout le temps, mais pourrait utiliser le même nom avec ou sans
$
préfixe. Et le$
préfixe a un beau rappel que j'avais affaire à un objet jQuery:ou:
Stevo est droit, la signification et l'utilisation du dollar script signe (en Javascript et le jQuery plate-forme, mais pas en PHP) est complètement sémantique. $ est un personnage qui peut être utilisé comme partie d'un nom d'identificateur. En outre, le signe dollar est peut-être pas le plus "bizarre", chose que vous pouvez rencontrer en Javascript. Voici quelques exemples de l'identificateur valide les noms:
Tous les exemples ci-dessus va travailler.
Essayer.
Le caractère $ n'a pas de signification particulière pour le moteur JavaScript. C'est un caractère valide dans un nom de variable comme a-z, A-Z, _, 0-9, etc...
$
porte pas de signification particulière en JavaScript. Période.Depuis
_
au début d'un nom de variable est souvent utilisé pour indiquer qu'une variable privée (ou au moins l'un destiné à rester dans le privé), je trouve$
pratique pour l'ajout en face de ma brève alias code général des bibliothèques.Par exemple, lors de l'utilisation de jQuery, je préfère utiliser la variable
$J
(au lieu de simplement$
) et l'utilisation$P
lors de l'utilisation de php.js, etc.Le préfixe rend visuellement distincts à partir d'autres variables telles que mes propres variables statiques, cluing moi dans le fait que le code fait partie d'une bibliothèque ou d'un autre, et est moins susceptible de conflit ou de confondre les autres, une fois qu'ils savent de la convention.
Il également ne pas encombrer le code (ou nécessitent la saisie de texte supplémentaire) comme un complet répété pour chaque appel de la bibliothèque.
Je tiens à le considérer comme étant similaire à ce que les touches de modification faire pour élargir les possibilités de touches uniques.
Mais c'est juste mon propre convention.
Que j'ai vécu pendant 4 ans, il permettra à quelqu'un d'identifier facilement si la variable pointant une valeur/un objet ou un jQuery enveloppé de l'élément DOM
JS:
dans l'exemple ci-dessus, quand je vois la variable "$dataDiv" je peux facilement dire que cette variable pointant vers un jQuery enveloppé élément du DOM (dans ce cas, il est div). et aussi, je peux appeler toutes les méthodes jQuery avec habillage de l'objet comme $dataDiv.append(), $dataDiv.html(), $dataDiv.find() au lieu de $($dataDiv).append().
Espère que ça peut aidé.
donc finalement envie de dire que ça va être une bonne pratique à suivre mais ce n'est pas obligatoire.
Alors que vous pouvez simplement utiliser pour le préfixe de vos identifiants, il est censé être utilisé pour le code généré, telles que le remplacement des jetons dans un modèle, par exemple.
${varname}
est juste une convention d'affectation de noms aux développeurs jQuery utiliser pour distinguer les variables qui sont titulaires d'éléments jQuery.Plaine
{varname}
est utilisé pour stocker général animaux comme les textes et les chaînes de caractères.${varname}
est titulaire d'éléments retournés à partir de jQuery.Vous pouvez utiliser de la plaine
{varname}
pour stocker les éléments jQuery ainsi, mais comme je l'ai dit au début, ce qui le distingue de la plaine, les variables et les rend beaucoup plus facile à comprendre (imaginez le confondre pour une simple variable et de recherche pour comprendre ce qu'il détient).Par exemple :
Ici, bla est de stocker un retour jQuery élément.
Donc, lorsque quelqu'un d'autre voir le
$blah
dans le code, ils vont comprendre que c'est pas juste une chaîne de caractères ou un nombre, il est un élément jQuery.Angulaire utilise est pour les propriétés générées par le cadre. Deviner, ils vont par la (défunte) astuce fournie par l'ECMA-262 3.0.
$ est utilisé pour DISTINGUER entre les variables et jquery variables dans le cas de variables normales.
laissez vous placez une commande en FLIPKART alors si l'ordre est une variable de vous montrer la sortie de chaîne, puis il est nommé simple comme "ordre", mais si on clique sur passer la commande puis un objet est retourné l'objet sera désigné par $ que$la commande", de sorte que le programmeur peut en mesure de tailler les variables javascript et jquery variables dans l'ensemble du code.
Si vous voyez le signe dollar ($) ou double signe de dollar ($$), et sont curieux de savoir ce que cela signifie dans le Prototype de cadre, voici votre réponse:
Source:
http://www.prototypejs.org/api/utility/dollar-dollar
Un JavaScript valide identifiant shuold doit commencer par une lettre,
trait de soulignement ( _ ) ou le signe dollar ($);
les caractères suivants peuvent également
être des chiffres (0-9). Parce que JavaScript est sensible à la casse,
lettres
inclure les caractères "A" à "Z" (en majuscules) et le
les caractères "a" à "z" (en minuscule).
Détails:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variables
La raison que j'ai parfois l'utilisation de php nom-conventions avec des variables javascript:
Lors de validation de la saisie, je veux exécuter exactement les mêmes algorithmes à la fois côté client,
et côté serveur. Je veux vraiment que les deux côtés de code à l'air aussi semblables que possible, pour simplifier la maintenance. À l'aide de signes dollar dans les noms de variables rend cela plus facile.
(Aussi, certains judicieuse des fonctions d'assistance aider à rendre le code ressembler, par exemple, l'enveloppant d'entrée-valeur-les recherches, les non-OO versions de strlen (), substr, etc. Il nécessite encore quelques ajustements manuelle si.)