Alguém pode explicar o cifrão em Javascript?


378

O código em questão está aqui:

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

Qual é o objetivo do cifrão no nome da variável, por que não excluí-lo?



[resposta de ttony21] [1] está errado ao afirmar que não há tipos em Javascript, cf. [documentação oficial] [2] [1]: stackoverflow.com/questions/846585/… [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam

Esse segmento é bastante antigo, mas parece que os principais navegadores padronizaram os variáveis ​​globais $, $$. O que $ vs $$ deve fazer?
Nick Sotiros

Nada, a menos que você esteja no console do referido navegador. O Chrome, por exemplo, define $ e $$ como atalhos para document.querySelectoredocument.querySelectorAll
Kevin B

Respostas:


381

Um '$' em uma variável não significa nada de especial para o intérprete, como um sublinhado.

Pelo que vi, muitas pessoas que usam jQuery (que é como o seu código de exemplo me parece) tendem a prefixar variáveis ​​que contêm um objeto jQuery com $, para que sejam facilmente identificadas e não se misturem com, por exemplo, números inteiros .

A função de cifrão $()no jQuery é uma função de biblioteca usada com freqüência, portanto, um nome abreviado é desejável.


86
Nota: Por padrão, o jQuery usa "$" como um atalho para "jQuery". Isso tem alguns efeitos no uso de outras bibliotecas Javascript. Veja docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya

17
Em outras palavras, $ é comparável a qualquer símbolo aceitável nos nomes de variáveis ​​/ funções. Fazer var $=function(){}é o mesmo que fazer var a=function(){}.
F-3000

24
Thimmayya seu comentário "Por padrão, o jQuery usa" $ "como atalho para" jQuery "" deve estar em negrito na parte superior de todas as páginas do site da Jquery. Seus exemplos são terrivelmente documentados.
RustyH

E quando $ é especificado como um parâmetro de função? Eu estou olhando para algum código como jQuery(document).ready(function($){... Então o $ é usado dentro da implementação da função.
still_dreaming_1 16/09

4
@ ThrowawayAccount3Million É apenas parte do nome. No caso de $scope$, é um dos caracteres desse nome. Assim como se você tirar eo final $scope, ele não funcionará, portanto, tirar o $também não funcionará. No caso de você ver algo como $( "a" ).addClass( "test" ), o cifrão é o nome inteiro do que quer que seja.
still_dreaming_1

49

No seu exemplo, o $ não tem significado especial além de ser um caractere do nome.

No entanto , no ECMAScript 6 (ES6), o $ pode representar um Literal de Modelo

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

37

O sinal $ é um identificador para variáveis ​​e funções.

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

Isso tem uma explicação clara de para que serve o cifrão.

Aqui está uma explicação alternativa: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html


2
Javascript tem tipos; e, de qualquer forma, como o cifrão está relacionado a isso? É apenas um personagem que é um identificador legal em Javascript.
precisa

10
Não tenho certeza se chamaria esse link de explicação "clara". Realmente são necessários mais de 6 parágrafos para explicar que $ é simplesmente um caractere válido ao definir nomes de funções e variáveis?
Leve

11
Parece que o primeiro link está funcionando novamente. Eu tenho que concordar com @Slight que uma explicação alternativa é terrível.
Sander Garretsen

O código de exemplo no link é bastante fácil de entender. Impressionante!
蔡宗容

32

O cifrão é tratado como uma letra ou um sublinhado normal (_ ). Não tem significado especial para o intérprete.

Ao contrário de muitos idiomas semelhantes, os identificadores (como nomes funcionais e de variáveis) no Javascript podem conter não apenas letras, números e sublinhados, mas também podem conter cifrões . Eles podem até começar com um cifrão ou consistir apenas de um cifrão e nada mais.

Assim, $é uma função válida ou nome de variável em Javascript.

Por que você deseja um cifrão em um identificador?

A sintaxe realmente não impõe nenhum uso específico do cifrão em um identificador; portanto, cabe a você como deseja usá-lo. No passado, costumava ser recomendado iniciar um identificador com um cifrão apenas no código gerado - ou seja, código criado não manualmente, mas por um gerador de código.

No seu exemplo, no entanto, isso não parece ser o caso. Parece que alguém acabou de colocar um cifrão no início por diversão - talvez eles tenham sido um programador PHP que fez isso por hábito ou algo assim. No PHP, todos os nomes de variáveis ​​devem ter um cifrão na frente deles.

Atualmente, existe outro significado comum para um cifrão em um intérprete: o objeto jQuery, cujo nome consiste apenas em um único cifrão ( $). Esta é uma convenção emprestada de estruturas Javascript anteriores, como Prototype, e se o jQuery for usado com outras estruturas, haverá um conflito de nomes porque os dois usarão o nome $(o jQuery pode ser configurado para usar um nome diferente para seu objeto global) . Não há nada especial em Javascript que permita ao jQuery usar o único cifrão como o nome do objeto; como mencionado acima, é simplesmente apenas outro nome de identificador válido.


Você não pode conflitar com o objeto jQuery var $j = jQuery.noConflict();agora. $ J é o objeto jQuery.
Justin Liu

6

O cifrão é usado no ecmascript 2015-2016 como 'literais de modelo'. Exemplo:

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

Aqui está um exemplo de trabalho: https://es6console.com/j3lg8xeo/ Observe este sinal " ` ", não são aspas normais.

Você também pode conhecer $ enquanto trabalha com a biblioteca jQuery .

$ sign in Expressões regulares significa o fim da linha.


4

Sem motivo Talvez a pessoa que o codificou tenha vindo do PHP. Tem o mesmo efeito como se você o tivesse nomeado "_item" ou "item" ou "item $$".

Como sufixo (como "item $", pronunciado "items"), pode significar um observável, como um elemento DOM, como uma convenção chamada "Notação Finlandesa", semelhante à Notação Húngara.


1

Aqui está uma boa explicação curta em vídeo: https://www.youtube.com/watch?v=Acm-MD_6934

De acordo com o Ecma International Identifier, os nomes são tokens que são interpretados de acordo com a gramática dada na seção "Identificadores" do capítulo 5 do padrão Unicode, com algumas pequenas modificações. Um identificador é um IdentifierName que não é uma palavra reservada ( consulte 7.6.1 ). A gramática do identificador Unicode é baseada nas categorias de caracteres normativos e informativos especificados pelo Padrão Unicode. Os caracteres nas categorias especificadas na versão 3.0 do padrão Unicode devem ser tratados como nessas categorias por todas as implementações em conformidade com o ECMAScript. Esse padrão especifica adições de caracteres específicas:

O cifrão ($) e o sublinhado (_) são permitidos em qualquer lugar em um IdentifierName .

Outras leituras podem ser encontradas em: http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

A Ecma International é uma associação do setor fundada em 1961 e dedicada à padronização da Tecnologia da Informação e Comunicação (TIC) e Eletrônicos de Consumo (CE).


Embora esse link possa responder à pergunta, é melhor incluir aqui as partes essenciais da resposta e fornecer o link para referência. As respostas somente para links podem se tornar inválidas se a página vinculada for alterada.
TartanLlama

... @TartanLlama Se você rebaixou minha resposta, leia minha resposta atualizada. Obrigado.
Nomis

Não fui eu! Eu apenas sinalizei.
TartanLlama

... ok para a pessoa que recusou a votação, explique o motivo e leia minha resposta editada. Obrigado.
Nomis

5
... @TartanLlama isso apenas prova (novamente) que o recurso de downgrade anônimo do Stackoverflows está quebrado. Responder a perguntas antigas com respostas aceitas é bom para mim, pois eu acho útil ver outras respostas quando procuro respostas.
Nomis

1

Ao usar o jQuery, o uso do $símbolo como prefixo no nome da variável é meramente por convenção; é completamente opcional e serve apenas para indicar que a variável contém um objeto jQuery, como no seu exemplo.

Isso significa que, quando outra função jQuery precisar ser chamada no objeto, você não precisará envolvê-la $()novamente. Por exemplo, compare estes:

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

Com o $prefixo, as variáveis ​​que já contêm objetos jQuery são instantaneamente reconhecíveis e o código mais legível e elimina o empacotamento duplo / múltiplo $().

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.