Що таке знак долара в 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 є, але ви ніде не можете його знайти. Думаю, як тільки ви усвідомите, що відбувається, це може бути зручно, але насправді це просто бентежить і може замаскувати помилки.
mike nelson

1
Не знаю, коли він був прийнятий іншими браузерами, але я бачу, що він доступний також на IE11 та Edge.
isapir

так як люди можуть знати, чи це jquery? скажімо, ви імпортували велику бібліотеку, яка могла би включати кілька інших бібліотек, ви хочете знати, чи є там jquery. будь ласка, допоможіть.
Martian2049,

2
@ Martian2049 Я думаю, що справжній jQuery відповість на це$.fn.jquery
mb21

2
@Gaspacchio Це має бути ще одна відповідь. Однак майте на увазі, що в цьому питанні$ не було використано в літералі шаблону .
Зета,

11

Для перекладача це нічого не означає так само, як підкреслення

З специфікації ECMAScript:

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

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

За домовленістю, знак долара ($), підкреслення (_) та навіть деякий символ ASCII дозволяється використовувати де завгодно в ідентифікаторі JavaScript (Джерело: Документація Ecma Script (7.6 Ідентифікатори, ECMA-262, 3rd Ed.) Долар знак призначений для використання лише в механічно сформованому коді. Це означає, що ми не хочемо використовувати знак долара ($) в іменах наших ідентифікаторів, якщо ми не пишемо фреймворк. Далі наведено список дозволених символів, які можна використовувати де завгодно в імені ідентифікатора:

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)). Це означає, що масивні методи типу mapand friends, а не просто forEach, доступні при використанні, $$що насправді є досить корисним.


1

Це може бути що завгодно, як $і дійсне ім’я змінної, як і dollar.

З ECMAScript :

Identifier ::
IdentifierName but not ReservedWord

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::
UnicodeLetter
$
_ 
\ UnicodeEscapeSequence

Найпростішим рішенням, щоб дізнатись, що це таке і де це визначено, було б, мабуть, набрати $()і поставити точку зупинки на цьому рядку.


1

Щоб заповнити інші відповіді тут, MooTools також використовує $як псевдонім document.getElementById.

Він перевіряє, чи $зроблено, а потім буде встановлено за замовчуванням document.id.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.