Что означает знак «$» в JavaScript


Ответы:


284

Ваш фрагмент кода выглядит так, как будто он ссылается на методы из одной из популярных библиотек JavaScript (jQuery, ProtoType, mooTools и т. Д.).

Нет ничего загадочного в использовании $JavaScript. $просто допустимый идентификатор JavaScript.

JavaScript допускает прописные и строчные буквы, цифры и $и _. Он $был предназначен для использования сгенерированными машиной переменными (такими как $0001).

Прототип, jQuery и большинство библиотек javascript используют в $качестве основного базового объекта (или функции). У большинства из них также есть способ отказаться, $чтобы его можно было использовать с другой библиотекой, которая его использует. В этом случае вы используете jQueryвместо $. На самом деле $это просто ярлык для jQuery.


2
@ Паоло: Не уверен, что именно вы имеете в виду. (Я полагаю, мой ранее принятый.) Ну, я думал, что мой был, по крайней мере, полностью правильным. Это включает в себя немного вспомогательной информации, но я не уверен, что она оправдывает "много" ...
Нолдорин

1
@ Noldorin: вспомогательная информация это хорошо. В вашем вопросе абсолютно не упоминалась причина использования $, причина его использования и тот факт, что jQuery - лишь одна из многих библиотек, которые ее используют. Наличие его в качестве принятого ответа означает, что это лучший ответ на вопрос, и это не так.
Паоло Бергантино

+1 Сначала это действительный идентификатор JavaScript, который часто используется фреймворками JavaScript в качестве псевдонима.
Гамбо

@ Паоло: Часто да. Однако не было никаких признаков того, что ОП хотел знать об этом. Прямой ответ тоже хорошая вещь. :) Сказав это, я все равно согласен, что это лучший ответ. Единственное мое замечание было с акцентом, который вы уделяли конкретному вопросу.
Нолдорин

2
Кстати, я представил небольшую историю функции $ в своем посте здесь: stackoverflow.com/questions/1122690/jquery-and-questions/…
SolutionYogi

44

Из другого ответа :

Немного истории

Помните, в этом нет ничего особенного $. Это имя переменной, как и любое другое. В прежние времена люди писали код, используя document.getElementById. Поскольку JavaScript чувствителен к регистру, во время записи было нормально ошибиться document.getElementById. Должен ли я капитал 'b'из 'by'? Должен ли я капитал 'i'из Id?вас получить дрейф. Поскольку функции являются первоклассными гражданами в JavaScript, вы всегда можете сделать это:

var $ = document.getElementById; //freedom from document.getElementById!

Когда библиотека Prototype прибыла, они назвали свою функцию, которая получает элементы DOM, как '$'. Почти все библиотеки JavaScript скопировали эту идею. Прототип также представил$$ функция выбора элементов с помощью CSS-селектора.

jQuery также адаптировал $функцию, но расширил ее, чтобы он мог принимать всевозможные «селекторы» для получения нужных вам элементов. Теперь, если вы уже используете Prototype в своем проекте и хотите включить jQuery, у вас возникнут проблемы, так как вы '$'можете обратиться либо к реализации Prototype, либо к реализации jQuery. Вот почему jQuery имеет опцию noConflict, так что вы можете включить jQuery в ваш проект, который использует Prototype и медленно переносить ваш код. Я думаю, что это был блестящий шаг со стороны Джона! :)


10
var $ = document.getElementById;не работает в Firefox или Google Chrome. Вы должны использовать function $(id) { return document.getElementById(id); }вместо этого. См. Stackoverflow.com/questions/1007340 для получения дополнительной информации.
Грант Вагнер

Я не знал этого, спасибо Грант. Я могу подтвердить, что это работало в IE6, а также в Firefox 2, потому что я часто использовал эту технику. Я буду обновлять мой основной пост.
Решение

42

Это, скорее всего, код jQuery (точнее, JavaScript с использованием библиотеки jQuery).

$Представляет функцию JQuery , и на самом деле является сокращенным псевдоним jQuery. (В отличие от большинства языков, $символ не зарезервирован и может использоваться в качестве имени переменной.) Обычно он используется как селектор (то есть функция, которая возвращает набор элементов, найденных в DOM).


3
Вы должны добавить, что $ аналогично x, это может быть все, что вы ему назначите
hasen

Что означает этот фрагмент кода: $ input.prop ('type') == 'radio';
OKGimmeMoney

21

Как говорят все остальные ответы; это может быть что угодно, но обычно это JQuery.

Однако в ES6 это оператор интерполяции строк в шаблоне «литерал» например.

var s = "new" ; // you can put whatever you think appropriate here.
var s2 = `There are so many ${s} ideas these days !!` ; //back-ticks not quotes
console.log(s2) ;

результат:

В наши дни так много новых идей!


2
Это полезный ответ! Это был тот, который я искал, так как знал, что у нас нет jQuery или какой-либо другой библиотеки. По сути, это способ печати переменной внутри большой строки без кавычек, знаков плюс и т. Д.
Оскар Браво,


4

В дополнение к вышеприведенным ответам, $не имеет особого значения в javascript, его можно свободно использовать в именовании объектов. В JQuery , он просто используется в качестве псевдонима для JQuery объекта и JQuery () функции. Однако вы можете столкнуться с ситуациями, когда вы захотите использовать его вместе с другой библиотекой JS, которая также использует $, что может привести к конфликту имен. Есть метод в JQuery только по этой причине,jQuery.noConflict() .

Вот пример из документации JQuery :

<script src="other_lib.js"></script>
<script src="jquery.js"></script>
<script>
$.noConflict();
// Code that uses other library's $ can follow here.
</script>

Кроме того, вы также можете использовать как это

(function ($) {
// Code in which we know exactly what the meaning of $ is
} (jQuery));

Ссылка : https://api.jquery.com/jquery.noconflict/


3

Из документации jQuery, описывающей базовый объект jQuery :

Многие разработчики добавляют префикс $ к имени переменных, которые содержат объекты jQuery, чтобы помочь дифференцировать. В этой практике нет ничего волшебного - она ​​просто помогает некоторым людям отслеживать, что содержат различные переменные.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.