¿Alguien puede explicar el signo de dólar en Javascript?

378

El código en cuestión está aquí:

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

¿Cuál es el propósito del signo de dólar en el nombre de la variable, por qué no simplemente excluirlo?

Keith Donegan
fuente
3
posible duplicado de stackoverflow.com/questions/205853/…
DisgruntledGoat
[La respuesta de ttony21] [1] es incorrecta al indicar que no hay tipos en Javascript, cf. [documentación oficial] [2] [1]: stackoverflow.com/questions/846585/… [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam
Este hilo es bastante antiguo, pero parece que los principales navegadores han estandarizado las variables globales $, $$. ¿Qué se supone que debe hacer $ vs $$?
Nick Sotiros
Nada, a menos que estés en la consola de dicho navegador. Chrome, por ejemplo, define $ y $$ como accesos directos a document.querySelectorydocument.querySelectorAll
Kevin B

Respuestas:

381

Un '$' en una variable no significa nada especial para el intérprete, como un guión bajo.

Por lo que he visto, muchas personas que usan jQuery (que es como me parece su código de ejemplo) tienden a prefijar las variables que contienen un objeto jQuery con $ para que se identifiquen fácilmente y no se mezclen con, por ejemplo, enteros .

La función de signo de dólar $()en jQuery es una función de biblioteca que se usa con frecuencia, por lo que es conveniente un nombre corto.

cobbal
fuente
86
Nota: Por defecto, jQuery usa "$" como acceso directo para "jQuery". Esto tiene algunos efectos sobre el uso de otras bibliotecas Javascript. Ver docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya el
17
En otras palabras, $ es comparable a cualquier símbolo aceptable en los nombres de variables / funciones. Hacer var $=function(){}es lo mismo que hacer var a=function(){}.
F-3000
24
Thimmayya su comentario "Por defecto, jQuery usa" $ "como atajo para" jQuery "" debe estar en negrita en la parte superior de cada página del sitio web de Jquery, sus ejemplos están horriblemente documentados.
RustyH
¿Qué pasa cuando $ se especifica como un parámetro de función? Estoy mirando un código como jQuery(document).ready(function($){... Luego, el $ se usa dentro de la implementación de la función.
still_dreaming_1
44
@ ThrowawayAccount3Million Es solo parte del nombre. En el caso de $scope$ es uno de los caracteres en ese nombre. Al igual que si te quitas el eal final de $scope, no funcionará, así que quitarlo $tampoco funcionará. En el caso de que vea algo así $( "a" ).addClass( "test" ), el signo de dólar es el nombre completo de lo que sea.
still_dreaming_1
49

En su ejemplo, $ no tiene un significado especial aparte de ser un carácter del nombre.

Sin embargo , en ECMAScript 6 (ES6) el $ puede representar una plantilla literal

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.
Hasta el arroyo
fuente
37

El signo $ es un identificador para variables y funciones.

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

Eso tiene una explicación clara de para qué sirve el signo de dólar.

Aquí hay una explicación alternativa: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html

AlbertoPL
fuente
2
Javascript tiene tipos; y en cualquier caso, ¿cómo se relaciona el signo de dólar con eso? Es solo un personaje que resulta ser un identificador legal en Javascript.
Erik Kaplun
10
No estoy seguro de llamar a ese enlace una explicación "clara". ¿Realmente se necesitan más de 6 párrafos para explicar que $ es simplemente un carácter válido al definir nombres de funciones y variables?
Ligero
1
Parece que el primer enlace está funcionando nuevamente. Tengo que estar de acuerdo con @Slight en que la explicación alternativa es terrible.
Sander Garretsen
El código de muestra en el enlace es bastante fácil de entender. ¡Increíble!
蔡宗容
32

El signo de dólar se trata como una letra normal o un guión bajo ( _). No tiene un significado especial para el intérprete.

A diferencia de muchos lenguajes similares, los identificadores (como los nombres funcionales y variables) en Javascript pueden contener no solo letras, números y guiones bajos, sino también que también pueden contener signos de dólar . Incluso se les permite comenzar con un signo de dólar, o consistir solo en un signo de dólar y nada más.

Por lo tanto, $es una función válida o nombre de variable en Javascript.

¿Por qué querrías un signo de dólar en un identificador?

La sintaxis realmente no impone ningún uso particular del signo de dólar en un identificador, por lo que depende de usted cómo desea usarlo. En el pasado, a menudo se recomendaba comenzar un identificador con un signo de dólar solo en el código generado , es decir, código creado no a mano sino por un generador de código.

En su ejemplo, sin embargo, este no parece ser el caso. Parece que alguien acaba de poner un signo de dólar al principio por diversión, tal vez fueron un programador de PHP que lo hicieron por costumbre, o algo así. En PHP, todos los nombres de variables deben tener un signo de dólar frente a ellos.

Hay otro significado común para un signo de dólar en un intérprete hoy en día: el objeto jQuery, cuyo nombre solo consiste en un solo signo de dólar ( $). Esta es una convención tomada de marcos JavaScript anteriores como Prototype, y si jQuery se usa con otros marcos similares, habrá un choque de nombres porque ambos usarán el nombre $(jQuery se puede configurar para usar un nombre diferente para su objeto global) . No hay nada especial en Javascript que permita a jQuery usar el signo de dólar único como nombre de objeto; como se mencionó anteriormente, es simplemente otro nombre de identificador válido.

thomasrutter
fuente
No puede conflicto el objeto jQuery con esto var $j = jQuery.noConflict();ahora $ j es el objeto jQuery.
Justin Liu
6

El signo de dólar se usa en ecmascript 2015-2016 como 'plantillas literales'. Ejemplo:

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

Aquí ejemplo de trabajo: https://es6console.com/j3lg8xeo/ Observe este signo " ` ", no son comillas normales.

U también puede cumplir $ mientras trabaja con la biblioteca jQuery .

El signo $ en expresiones regulares significa el final de la línea.

Vasyl Gutnyk
fuente
4

Sin razón. Quizás la persona que lo codificó vino de PHP. Tiene el mismo efecto que si lo hubiera llamado "_item" o "item" o "item $$".

Como sufijo (como "item $", pronunciado "items"), puede significar un observable como un elemento DOM como una convención llamada "notación finlandesa" similar a la notación húngara.

Claudiu
fuente
1

Aquí hay una buena explicación breve en video: https://www.youtube.com/watch?v=Acm-MD_6934

De acuerdo con Ecma International, los nombres de identificadores son tokens que se interpretan de acuerdo con la gramática dada en la sección "Identificadores" del capítulo 5 del estándar Unicode, con algunas pequeñas modificaciones. Un identificador es un nombre de identificador que no es una palabra reservada ( ver 7.6.1 ). La gramática del identificador Unicode se basa en categorías de caracteres normativos e informativos especificados por el estándar Unicode. Los caracteres en las categorías especificadas en la versión 3.0 del estándar Unicode deben ser tratados como en esas categorías por todas las implementaciones ECMAScript conformes. Este estándar especifica adiciones de caracteres específicos:

El signo de dólar ($) y el guión bajo (_) están permitidos en cualquier parte de un IdentifierName .

Puede encontrar más información en: http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

Ecma International es una asociación de la industria fundada en 1961 y dedicada a la estandarización de las tecnologías de la información y la comunicación (TIC) y la electrónica de consumo (CE).

Nomis
fuente
Si bien este enlace puede responder la pregunta, es mejor incluir aquí las partes esenciales de la respuesta y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden volverse inválidas si la página vinculada cambia.
TartanLlama
... @TartanLlama Si rebajaste mi respuesta, lee mi respuesta actualizada. Gracias.
Nomis
¡No fui yo! Acabo de marcarlo.
TartanLlama
... ok a la persona que votó en contra de esto, explique por qué y lea mi respuesta editada. Gracias.
Nomis
55
... @TartanLlama esto solo prueba (de nuevo) que la función de degradación anónima de Stackoverflows está rota. Contestar viejas preguntas con respuestas aceptadas está bien para mí, ya que yo mismo encuentro útil ver otras respuestas cuando busco respuestas.
Nomis
1

Cuando se usa jQuery, el uso del $símbolo como prefijo en el nombre de la variable es simplemente por convención; es completamente opcional y sirve solo para indicar que la variable contiene un objeto jQuery, como en su ejemplo.

Esto significa que cuando se necesita invocar otra función jQuery en el objeto, no necesitará envolverla $()nuevamente. Por ejemplo, compare estos:

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

Con el $prefijo, las variables que ya contienen objetos jQuery se reconocen instantáneamente y el código es más legible, y elimina la envoltura doble / múltiple $().

Engancharse
fuente