Может кто-нибудь объяснить знак доллара в Javascript? - PullRequest
344 голосов
/ 11 мая 2009

Код здесь:

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

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

Ответы [ 8 ]

353 голосов
/ 11 мая 2009

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

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

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

38 голосов
/ 11 мая 2009

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

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

33 голосов
/ 15 декабря 2016

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

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

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.
31 голосов
/ 11 мая 2009

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

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

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

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

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

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

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

4 голосов
/ 06 июня 2017

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

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

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

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

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

3 голосов
/ 11 мая 2009

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

Может быть, это какая-то венгерская нотация для кодировщика, которая отмечает, что переменная является элементом DOM или что-то в этом роде.

1 голос
/ 05 февраля 2019

При использовании 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, мгновенно распознаются, а код становится более читабельным и исключает двойное / множественное перенос с $().

1 голос
/ 10 февраля 2015

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

Согласно Ecma International, Идентификационные имена - это токены, которые интерпретируются в соответствии с грамматикой, приведенной в разделе «Идентификаторы» главы 5 стандарта Unicode, с небольшими изменениями. Идентификатор - это 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).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...