Что такое знак доллара в Javascript, если не jQuery

86

Несколько лет назад я занимался программированием на javascript / jQuery и только что начал снова. Тогда знак доллара использовался для всех функций jQuery, и если библиотека jQuery не была импортирована, знак доллара не определялся.

Сегодня я запустил Firefox в совершенно пустом html-файле без библиотек javascript, но, тем не менее, знак доллара на что-то указывает. Если я открою консоль Firefox и наберу «$», я получу "function()".

1) Верно ли, что знак доллара не был присвоен несколько лет назад, или я неправильно помню?

2) Что за знак доллара , если не jQuery?

Мадс Скьерн
источник

Ответы:

122

1) Верно ли, что знак доллара не был присвоен несколько лет назад, или я неправильно помню?

Это верно и по-прежнему верно.

2) Что за знак доллара, если не jQuery?

Firefox и Chrome реализовать $, $$и некоторые другие , как вспомогательные команды. Оба будут устанавливать $$на document.querySelectorAll(), и набор $для document.querySelectorесли window.$не была определена.

Итак, вы видите не стандартный JavaScript, а помощник в консоли разработчика вашего браузера. Это также не jQuery (если вы не находитесь на странице, использующей jQuery). Тем не менее, его поведение близко к поведению jQuery, касающемуся того, что querySelector(для одиночных совпадений) и querySelectorAll(для множественных совпадений) дает вам почти такую ​​же силу, как и селектор jQuery.

Зета
источник
31
ОК, это действительно раздражает. Это просто сбивает с толку, потому что похоже, что jquery есть, но вы не можете его нигде найти. Думаю, если вы узнаете, что происходит, это может быть удобно, но на самом деле это сбивает с толку и может замаскировать ошибки.
Майк Нельсон
1
Не уверен, когда он был принят другими браузерами, но я вижу, что он доступен также в IE11 и Edge.
isapir
так как люди узнают, что это jquery? скажем, вы импортировали большую библиотеку, которая могла включать в себя несколько других библиотек, вы хотите знать, есть ли там jquery. пожалуйста помоги.
Martian2049,
2
@ Martian2049 Я думаю, что настоящий jQuery отреагирует на$.fn.jquery
mb21
2
@Gaspacchio Это должен быть другой ответ. Однако имейте в виду, что в этом вопросе$ не использовался литерал шаблона .
Zeta
11

Это ничего не значит для интерпретатора, как и подчеркивание

Из спецификации ECMAScript:

Знак доллара ($) и подчеркивание (_) разрешены в любом месте идентификатора. Знак доллара предназначен для использования только в механически генерируемом коде.

Вы также можете проверить знак доллара в JavaScript ($) - для чего он нужен?

По соглашению, знак доллара ($), подчеркивание (_) и даже некоторые символы ASCII разрешено использовать в любом месте идентификатора JavaScript (Источник: документация по сценарию Ecma (Идентификаторы 7.6, ECMA-262, 3-е изд.) Доллара. Знак предназначен для использования только в механически сгенерированном коде. Это означает, что мы не хотим использовать знак доллара ($) в именах наших идентификаторов, если только мы не пишем фреймворк. Ниже приведен список разрешенных символов, которые можно использовать в любом месте имени идентификатора:

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

РЕДАКТИРОВАТЬ:-

На самом деле функция знака доллара стала более или менее де-факто ярлыком document.getElementById().

Чтобы подтвердить мою точку зрения, проверьте это :

$ (селектор)

Возвращает единственный элемент, соответствующий заданному селектору CSS. В старых версиях Firebug это было эквивалентом document.getElementById .

Рахул Трипати
источник
Эта ссылка на блог теперь мертва.
Виктор Заманян
Первая часть ответа неактуальна, вторая часть устарела и неверна в контексте современных браузеров.
user4642212
7

Dollar sign($) не был назначен, но некоторые браузеры добавляют функцию для специального использования.

Как и в Google Chrome, если вы наберете $на консоли, он вернет:

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

Эта функция назначена для Google Chrome Developer Tool и упрощает отладку.

если вы введете $('div'), он вернет что-то вроде этого:

e.fn.e.init[178]

и включить в него каждый divобъект DOM.

Кстати, после того, как вы нажмете правую кнопку мыши, чтобы выбрать элемент, вы можете получить доступ к области angular.js по типу $scopeна консоли

Чен-Цу Линь
источник
4

Обратите внимание, что $$это не совсем так document.querySelectorAll, потому что, в отличие от этой функции, она не возвращает NodeList:

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

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

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

Так $$(selector)что действительно больше нравится Array.from(document.querySelectorAll(selector)). Это означает, что при использовании доступны такие методы массива, как mapи друзья, а не только forEach, $$что на самом деле весьма полезно.

user4642212
источник
1

Это может быть что угодно, например, $допустимое имя переменной dollar.

Из ECMAScript :

Identifier ::
IdentifierName but not ReservedWord

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::
UnicodeLetter
$
_ 
\ UnicodeEscapeSequence

Самым простым решением, чтобы увидеть, что это такое и где он определен, вероятно, было бы набрать текст $()и поставить точку останова на этой строке.

Дени Сегюре
источник
1

Чтобы завершить другие ответы здесь, MooTools также использует $в качестве псевдонима для document.getElementById.

Он проверяет, был ли $взят, и затем по умолчанию будет document.id.

Серджио
источник