Qual é o cifrão em Javascript, senão jQuery

86

Eu programei em javascript / jQuery alguns anos atrás e acabei de começar de novo. Naquela época, o cifrão era usado para todas as funcionalidades do jQuery e, se nenhuma biblioteca jQuery fosse importada, o cifrão não era definido.

Hoje, eu iniciei o Firefox, em um arquivo html completamente vazio, sem bibliotecas javascript, e ainda assim o cifrão aponta para algo. Se eu abrir o console do Firefox e digitar '$' , recebo "function()".

1) É correto que o cifrão não foi atribuído, alguns anos atrás, ou eu me lembro errado?

2) Qual é o cifrão , senão o jQuery?

Mads Skjern
fonte

Respostas:

122

1) É correto que o cifrão não foi atribuído, alguns anos atrás, ou eu me lembro errado?

Isso está correto e ainda é verdade.

2) Qual é o cifrão, senão o jQuery?

Firefox e Chrome implementar $, $$e vários outros como comandos auxiliares. Ambos serão configurados $$para document.querySelectorAll()e configurados $para document.querySelectorse window.$não tiverem sido definidos.

Portanto, o que você está vendo não é realmente o JavaScript padrão, mas um auxiliar no console do desenvolvedor do seu navegador. Também não é jQuery (contanto que você não esteja em uma página usando jQuery). No entanto, seu comportamento é próximo ao de jQuery, em relação a isso querySelector(para correspondências únicas) e querySelectorAll(para várias correspondências) lhe dá quase a mesma força do seletor jQuery.

Zeta
fonte
31
OK, isso é realmente irritante. Isso só o torna confuso porque parece que jquery está lá, mas você não consegue encontrá-lo em lugar nenhum. Acho que uma vez que você está ciente do que está acontecendo, pode ser útil, mas é realmente confuso e pode mascarar bugs.
mike nelson
1
Não tenho certeza de quando foi adotado por outros navegadores, mas vejo que está disponível também no IE11 e no Edge.
isapir
então, como as pessoas sabem se é jquery? digamos, você importou uma grande biblioteca que pode ter incorporado algumas outras bibliotecas, você quer saber se o jquery está lá. por favor ajude.
Martian2049
2
@ Martian2049 Acho que o jQuery real responderia a$.fn.jquery
mb21
2
@Gaspacchio Essa deve ser outra resposta. No entanto, lembre-se de que $não foi usado em um literal de modelo nesta questão .
Zeta
11

Não significa nada para o intérprete, assim como o sublinhado

Da especificação ECMAScript:

O cifrão ($) e o sublinhado (_) são permitidos em qualquer lugar em um identificador. O cifrão deve ser usado apenas em código gerado mecanicamente.

Você também pode verificar o JavaScript Dollar Sign ($) - Para que serve?

Por convenção, o cifrão ($), o sublinhado (_) e até mesmo alguns caracteres ASCII podem ser usados ​​em qualquer lugar em um identificador JavaScript (Fonte: Documentação do Ecma Script (7.6 Identificadores, ECMA-262, 3ª Ed.) O dólar sinal destina-se ao uso apenas em código gerado mecanicamente. Isso significa que não queremos usar o cifrão ($) em nossos nomes de identificador, a menos que estejamos escrevendo uma estrutura. A seguir está uma lista de caracteres permitidos que podem ser usados em qualquer lugar em um nome de identificador:

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

EDITAR:-

Na verdade, a função de cifrão se tornou o atalho mais ou menos de fato para document.getElementById().

Para confirmar meu ponto, verifique isto :

$ (seletor)

Retorna um único elemento que corresponde ao seletor CSS fornecido. Em versões antigas do Firebug , isso costumava ser equivalente a document.getElementById .

Rahul Tripathi
fonte
Esse link do blog está morto agora.
Victor Zamanian
A primeira parte da resposta é irrelevante, a segunda parte é obsoleta e errada no contexto dos navegadores modernos.
user4642212
7

Dollar sign($) não foi atribuído, mas algum navegador adiciona função para uso especial.

Como o Google Chrome, se você digitar $no console, ele retornará:

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

Esta função é atribuída ao Google Chrome Developer Tool, e deixa a depuração mais fácil.

se você digitar $('div'), ele retornará algo assim:

e.fn.e.init[178]

e incluir todos os divobjetos DOM nele.

BTW, depois de clicar com o botão direito do mouse para selecionar o elemento, você pode acessar o escopo angular.js por tipo $scopeno console

Chen-Tsu Lin
fonte
4

Observe que $$não é bem assim document.querySelectorAll, porque, ao contrário dessa função, ela não retorna um NodeList:

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

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

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

Então $$(selector)é realmente mais parecido Array.from(document.querySelectorAll(selector)). Isso significa que métodos de array como mape friends, não apenas forEach, estão disponíveis quando usados, o $$que é realmente muito útil.

user4642212
fonte
1

Pode ser qualquer coisa, como $um nome de variável válido, exatamente como dollar.

Do ECMAScript :

Identifier ::
IdentifierName but not ReservedWord

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::
UnicodeLetter
$
_ 
\ UnicodeEscapeSequence

A solução mais simples para ver o que é e onde está definido provavelmente seria digitar $()e colocar um ponto de interrupção nesta linha.

Denys Séguret
fonte
1

Só para completar as outras respostas aqui, MooTools também usa $como apelido para document.getElementById.

Ele verifica se o $é usado e o padrão é document.id.

Sergio
fonte