¿Qué es el signo de dólar en Javascript, si no jQuery?

86

Hice algo de programación en javascript / jQuery hace unos años y acabo de empezar de nuevo. En aquel entonces, el signo de dólar se usaba para toda la funcionalidad de jQuery, y si no se importaba ninguna biblioteca de jQuery, el signo de dólar no estaba definido.

Hoy, inicié Firefox, en un archivo html completamente vacío sin bibliotecas javascript y, sin embargo, el signo de dólar apunta a algo. Si abro la consola de Firefox y escribo '$' , obtengo "function()".

1) ¿Es correcto que no se asignó el signo de dólar, hace unos años, o lo recuerdo mal?

2) ¿Qué es el signo de dólar , sino jQuery?

Mads Skjern
fuente

Respuestas:

122

1) ¿Es correcto que no se asignó el signo de dólar, hace unos años, o lo recuerdo mal?

Eso es correcto y sigue siendo cierto.

2) ¿Qué es el signo de dólar, sino jQuery?

Firefox y Chrome implementan $, $$y varios otros como comandos auxiliares. Ambos se establecerán $$en document.querySelectorAll()y se establecerán $en document.querySelectorsi window.$no se ha definido.

Entonces, lo que está viendo no es realmente JavaScript estándar, sino un ayudante en la consola de desarrollo de su navegador. Tampoco es jQuery (siempre que no esté en una página usando jQuery). Sin embargo, su comportamiento es cercano al de jQuery, con respecto a eso querySelector(para coincidencias únicas) y querySelectorAll(para coincidencias múltiples) le brinda casi la misma fuerza que el selector jQuery.

Zeta
fuente
31
Está bien, eso es realmente molesto. Simplemente lo hace confuso porque parece que jquery está ahí, pero no puede encontrarlo en ningún lado. Supongo que una vez que se dé cuenta de que está sucediendo, podría ser útil, pero en realidad es confuso y podría enmascarar errores.
Mike Nelson
1
No estoy seguro de cuándo fue adoptado por otros navegadores, pero lo veo disponible también en IE11 y Edge.
isapir
entonces, ¿cómo sabe la gente si es jquery? digamos, ha importado una biblioteca grande que podría haber incorporado algunas otras bibliotecas, quiere saber si el jquery está allí. por favor ayuda.
Martian2049
2
@ Martian2049 Creo que el verdadero jQuery respondería$.fn.jquery
mb21
2
@Gaspacchio Esa debería ser otra respuesta. Sin embargo, tenga en cuenta que $no se usó en una plantilla literal en esta pregunta .
Zeta
11

No significa nada para el intérprete al igual que el guión bajo

De la especificación ECMAScript:

El signo de dólar ($) y el subrayado (_) están permitidos en cualquier lugar de un identificador. El signo de dólar está diseñado para usarse solo en código generado mecánicamente.

También puede consultar el signo de dólar de JavaScript ($): ¿para qué sirve?

Por convención, se permite el signo de dólar ($), el guión bajo (_) e incluso algunos caracteres ASCII para ser utilizado en cualquier lugar de un identificador de JavaScript (Fuente: documentación ECMA Script (7.6 Identificadores, ECMA-262, 3ª Ed). Dólar sign está diseñado para usarse solo en código generado mecánicamente. Esto significa que no queremos usar el signo de dólar ($) en nuestros nombres de identificadores, a menos que estemos escribiendo un marco. La siguiente es una lista de caracteres permitidos que se pueden usar en cualquier lugar de un nombre de identificador:

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
UnicodeEscapeSequence

EDITAR:-

En realidad, la función del signo del dólar se ha convertido en el atajo más o menos de facto hacia document.getElementById().

Para confirmar mi punto, marque esto :

$ (selector)

Devuelve un solo elemento que coincide con el selector de CSS proporcionado. En las versiones anteriores de Firebug , esto solía ser equivalente a document.getElementById .

Rahul Tripathi
fuente
Ese enlace de blog está muerto ahora.
Victor Zamanian
La primera parte de la respuesta es irrelevante, la segunda parte es obsoleta y incorrecta en el contexto de los navegadores modernos.
user4642212
7

Dollar sign($) no se asignó, pero algunos navegadores agregan funciones para un uso especial.

Al igual que Google Chrome, si escribe $en la consola, devolverá:

function $(selector, [startNode]) { [Command Line API] }

Esta función asignada para la herramienta de desarrollo de Google Chrome permite depurar más fácilmente.

si escribe $('div'), devolverá algo como esto:

e.fn.e.init[178]

e incluir todos los divobjetos DOM en él.

Por cierto, después de hacer clic con el botón derecho del mouse para seleccionar el elemento, puede acceder al alcance de angular.js por tipo $scopeen la consola

Chen-Tsu Lin
fuente
4

Tenga en cuenta que $$no es del todo document.querySelectorAll, porque a diferencia de esa función, no devuelve un NodeList:

document.querySelectorAll("p") instanceof NodeList // true

$$("p") instanceof NodeList // false

Array.isArray($$("p")) // true

Así $$(selector)que realmente es más parecido Array.from(document.querySelectorAll(selector)). Esto significa que los métodos de matriz como mapy amigos, no solo forEach, están disponibles cuando se usan, lo $$que en realidad es bastante útil.

usuario4642212
fuente
1

Puede ser cualquier cosa, al igual $que un nombre de variable válido, como dollar.

Desde ECMAScript :

Identifier ::
IdentifierName but not ReservedWord

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::
UnicodeLetter
$
_ 
\ UnicodeEscapeSequence

La solución más simple para ver qué es y dónde está definido probablemente sería escribir $()y poner un punto de interrupción en esta línea.

Denys Séguret
fuente
1

Solo para completar las otras respuestas aquí, MooTools también usa $como alias para document.getElementById.

Verifica si $está tomado y luego lo hará por defecto document.id.

Sergio
fuente