Может кто-нибудь объяснить знак доллара в Javascript?

378

Код, о котором идет речь, находится здесь:

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

Какова цель знака доллара в имени переменной, почему бы просто не исключить его?

Кит Донеган
источник
3
возможно дубликат stackoverflow.com/questions/205853/...
DisgruntledGoat
[ответ ttony21] [1] неверно утверждать, что в Javascript нет типов, ср. [официальная документация] [2] [1]: stackoverflow.com/questions/846585/… [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam
Эта ветка довольно старая, но кажется, что основные браузеры стандартизировали глобальные переменные $, $$. Что должен делать $ vs $$?
Ник Сотирос
Ничего, если только вы не находитесь в указанной консоли браузера. Например, Chrome определяет $ и $$ как ярлыки для document.querySelectorиdocument.querySelectorAll
Кевин Б.

Ответы:

381

'$' В переменной не означает ничего особенного для интерпретатора, как подчеркивание.

Из того, что я видел, многие люди, использующие jQuery (как выглядит ваш пример кода для меня), имеют тенденцию ставить префиксные переменные, которые содержат объект jQuery, с помощью $, чтобы их можно было легко идентифицировать и не смешивать, скажем, с целыми числами ,

Функция знака доллара $()в jQuery является библиотечной функцией, которая часто используется, поэтому желательно короткое имя.

cobbal
источник
86
Примечание. По умолчанию jQuery использует «$» в качестве ярлыка для «jQuery». Это оказывает некоторое влияние на использование других библиотек Javascript. См. Docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya
17
Другими словами, $ сопоставимо с любым допустимым символом в именах переменных / функций. Делать var $=function(){}- это то же самое, что и делать var a=function(){}.
F-3000
24
Thimmayya Ваш комментарий "По умолчанию jQuery использует" $ "в качестве ярлыка для" jQuery "" должен быть жирным шрифтом вверху каждой страницы на сайте Jquery, их примеры ужасно документированы.
RustyH
Как насчет того, когда $ указывается в качестве параметра функции? Я смотрю на некоторый код, как jQuery(document).ready(function($){... Тогда $ используется внутри реализации функции.
still_dreaming_1
4
@ ThrowawayAccount3Million Это просто часть названия. В случае $scope$ это один из символов в этом имени. Точно так же, как если вы снимаете «в eконце» $scope, это не сработает, так что «взятие» $также не сработает. В случае, если вы видите что-то вроде $( "a" ).addClass( "test" ), знак доллара - это полное название того, что это такое.
still_dreaming_1
49

В вашем примере $ не имеет особого значения, кроме как символ имени.

Однако в ECMAScript 6 (ES6) $ может представлять литерал шаблона

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.
UpTheCreek
источник
37

Знак $ является идентификатором для переменных и функций.

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

Это имеет четкое объяснение того, для чего предназначен знак доллара.

Вот альтернативное объяснение: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html

AlbertoPL
источник
2
У Javascript есть типы; и в любом случае, как знак доллара вообще связан с этим? Это просто символ, который является юридическим идентификатором в Javascript.
Эрик Каплун
10
Я не уверен, что назвал бы эту ссылку "ясным" объяснением. Действительно ли нужно более 6 параграфов, чтобы объяснить, что $ - это просто допустимый символ при определении имен функций и переменных?
Небольшое
1
Похоже, первая ссылка снова работает. Я должен согласиться с @Slight, что альтернативное объяснение ужасно.
Сандер Гарретсен
Пример кода в ссылке довольно прост для понимания. Потрясающие!
蔡宗容
32

Знак доллара рассматривается как обычная буква или знак подчеркивания ( _). Это не имеет особого значения для переводчика.

В отличие от многих похожих языков, идентификаторы (такие как функциональные имена и имена переменных) в Javascript могут содержать не только буквы, цифры и символы подчеркивания, но также могут содержать знаки доллара . Они даже могут начинаться со знака доллара или состоять только из знака доллара и ничего более.

Таким образом, $является допустимой функцией или именем переменной в Javascript.

Зачем вам знак доллара в идентификаторе?

Синтаксис на самом деле не навязывает какое-либо конкретное использование знака доллара в идентификаторе, поэтому вам решать, как вы хотите его использовать. В прошлом часто рекомендовалось начинать идентификатор со знака доллара только в сгенерированном коде, то есть в коде, созданном не вручную, а генератором кода.

В вашем примере, однако, это не так. Похоже, кто-то просто поставил знак доллара в начале для забавы - возможно, это был программист PHP, который сделал это по привычке, или что-то в этом роде. В PHP все имена переменных должны иметь знак доллара перед ними.

В настоящее время в интерпретаторе существует еще одно общее значение знака доллара: объект jQuery, имя которого состоит только из одного знака доллара ( $). Это соглашение заимствовано из более ранних Javascript-фреймворков, таких как Prototype, и если jQuery используется с другими такими фреймворками, произойдет конфликт имен, поскольку они оба будут использовать имя $(jQuery может быть настроен на использование другого имени для своего глобального объекта) , В Javascript нет ничего особенного, что позволяет jQuery использовать один знак доллара в качестве имени объекта; как уже упоминалось выше, это просто еще одно действительное имя идентификатора.

thomasrutter
источник
Вы можете noconflict объект jQuery с этим var $j = jQuery.noConflict();теперь $ j является объектом jQuery.
Джастин Лю
6

Знак доллара используется в ecmascript 2015-2016 как «шаблонные литералы». Пример:

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

Вот рабочий пример: https://es6console.com/j3lg8xeo/ Обратите внимание на этот знак " ` ", это не нормальные кавычки.

Вы также можете встретить $ при работе с библиотекой jQuery .

Знак $ в регулярных выражениях означает конец строки.

Василий Гутник
источник
4

Нет причин. Возможно, человек, который его кодировал, пришел из PHP. Это имеет тот же эффект, как если бы вы назвали его «_item» или «item» или «item $$».

В качестве суффикса (например, «item $», произносится «items») он может обозначать наблюдаемое, например элемент DOM, в виде соглашения, называемого «финская нотация», аналогичного венгерской нотации.

Клаудиу
источник
1

Вот хорошее краткое объяснение видео: https://www.youtube.com/watch?v=Acm-MD_6934

Согласно Ecma International, Идентификационные имена - это токены, которые интерпретируются в соответствии с грамматикой, приведенной в разделе «Идентификаторы» главы 5 стандарта Unicode, с некоторыми небольшими изменениями. Identifier - это IdentifierName, которое не является ReservedWord ( см. 7.6.1 ). Грамматика идентификатора Unicode основана на нормативных и информативных категориях символов, определенных стандартом Unicode. Символы в указанных категориях в версии 3.0 стандарта Unicode должны обрабатываться так же, как и в этих категориях, для всех соответствующих реализаций ECMAScript. Этот стандарт определяет конкретные добавления символов:

Знак доллара ($) и подчеркивание (_) разрешены в любом месте в IdentifierName .

Дополнительную информацию можно найти по адресу : http://www.ecma-international.org/ecma-262/5.1/#sec-7.6.

Ecma International - это отраслевая ассоциация, основанная в 1961 году и занимающаяся стандартизацией информационных и коммуникационных технологий (ИКТ) и бытовой электроники (CE).

Nomis
источник
Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными в случае изменения связанной страницы.
TartanLlama
... @TartanLlama Если вы понизили мой ответ, прочитайте мой обновленный ответ. Спасибо.
Номис
Это был не я! Я просто пометил это.
TartanLlama
... хорошо человеку, который проголосовал против, объясните почему и прочитайте мой отредактированный ответ. Спасибо.
Номис
5
... @TartanLlama это еще раз (опять же) доказывает, что функция анонимного обновления Stackoverflows не работает. Мне хорошо отвечать на старые вопросы с принятыми ответами, так как я сам считаю полезным видеть другие ответы, когда я просматриваю ответы.
Номис
1

При использовании jQuery использование $символа в качестве префикса в имени переменной просто по соглашению; это совершенно необязательно и служит только для указания того, что переменная содержит объект jQuery, как в вашем примере.

Это означает, что когда нужно вызвать другую функцию jQuery для объекта, вам не нужно будет оборачивать ее $()снова. Например, сравните это:

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

С $префиксом переменные, уже содержащие объекты jQuery, мгновенно распознаются, а код становится более читабельным и исключает двойное / множественное перенос с помощью $().

загвоздка
источник