Jaki jest znak dolara w Javascript, jeśli nie jQuery

86

Kilka lat temu zrobiłem trochę programowania w javascript / jQuery i dopiero co zacząłem ponownie. Wtedy znak dolara był używany do wszystkich funkcji jQuery, a jeśli nie zaimportowano żadnej biblioteki jQuery, znak dolara nie był zdefiniowany.

Dzisiaj uruchomiłem Firefoksa w całkowicie pustym pliku html bez bibliotek javascript, a mimo to znak dolara na coś wskazuje. Jeśli otworzę konsolę Firefox i wpiszę „$” , otrzymam "function()".

1) Czy to prawda, że ​​kilka lat temu nie przypisano znaku dolara, czy źle pamiętam?

2) Jaki jest znak dolara , jeśli nie jQuery?

Mads Skjern
źródło

Odpowiedzi:

122

1) Czy to prawda, że ​​kilka lat temu nie przypisano znaku dolara, czy źle pamiętam?

To prawda i nadal jest prawdziwe.

2) Jaki jest znak dolara, jeśli nie jQuery?

Firefox i Chrome wdrożyć $, $$i kilka innych jako pomocniczych komend. Obie będą ustawione $$na document.querySelectorAll()i ustawione $na, document.querySelectorjeśli window.$nie zostały zdefiniowane.

Więc to, co widzisz, nie jest w rzeczywistości standardowym JavaScriptem, ale pomocnikiem w konsoli programisty przeglądarki. To także nie jest jQuery (o ile nie jesteś na stronie używającej jQuery). Jednak jego zachowanie jest zbliżone do tego jQuery, co dotyczy tego querySelector(dla pojedynczych dopasowań) i querySelectorAll(dla wielu dopasowań) daje prawie taką samą siłę jak selektor jQuery.

Zeta
źródło
31
OK, to naprawdę irytujące. To tylko sprawia, że ​​jest to mylące, ponieważ wygląda na to, że jquery istnieje, ale nie możesz go nigdzie znaleźć. Myślę, że kiedy już się zorientujesz, może to być przydatne, ale jest naprawdę mylące i może maskować błędy.
mike nelson
1
Nie jestem pewien, kiedy został przyjęty przez inne przeglądarki, ale widzę, że jest dostępny również w IE11 i Edge.
isapir
więc skąd ludzie wiedzą, czy to jquery? powiedzmy, że zaimportowałeś dużą bibliotekę, która mogła zawierać kilka innych bibliotek, chcesz wiedzieć, czy istnieje jquery. proszę pomóż.
Martian2049
2
@ Martian2049 Myślę, że prawdziwe jQuery zareaguje$.fn.jquery
mb21
2
@Gaspacchio To powinna być inna odpowiedź. Należy jednak pamiętać, że w tym pytaniu$ nie użyto dosłownego szablonu .
Zeta
11

To nic nie znaczy dla tłumacza, tak jak podkreślenie

Ze specyfikacji ECMAScript:

Znak dolara ($) i podkreślenie (_) są dozwolone w dowolnym miejscu identyfikatora. Znak dolara jest przeznaczony do użytku tylko w kodzie generowanym mechanicznie.

Możesz również sprawdzić JavaScript Dollar Sign ($) - do czego służy?

Zgodnie z konwencją, znak dolara ($), podkreślenie (_), a nawet niektóre znaki ASCII mogą być używane w dowolnym miejscu identyfikatora JavaScript (źródło: dokumentacja Ecma Script (7.6 Identyfikatory, ECMA-262, 3. wydanie) dolar znak jest przeznaczony do użycia tylko w kodzie generowanym mechanicznie. Oznacza to, że nie chcemy używać znaku dolara ($) w naszych nazwach indentyfikatorów, chyba że piszemy framework. Poniżej znajduje się lista dozwolonych znaków, których można użyć w dowolnym miejscu nazwy identyfikatora:

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

EDYTOWAĆ:-

W rzeczywistości funkcja znaku dolara stała się mniej więcej de facto skrótem do document.getElementById().

Aby potwierdzić mój punkt widzenia, sprawdź to :

$ (selektor)

Zwraca pojedynczy element pasujący do podanego selektora CSS. W starszych wersjach Firebuga był to odpowiednik document.getElementById .

Rahul Tripathi
źródło
Ten link do bloga jest teraz martwy.
Victor Zamanian
Pierwsza część odpowiedzi jest nieistotna, druga część jest przestarzała i błędna w kontekście nowoczesnych przeglądarek.
user4642212
7

Dollar sign($) nie został przypisany, ale funkcja dodawania przeglądarki do specjalnego użytku.

Podobnie jak Google Chrome, jeśli wpiszesz $na konsoli, zwróci:

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

Ta funkcja została przypisana do narzędzia Google Chrome Developer Tool i umożliwia łatwiejsze debugowanie.

jeśli wpiszesz $('div'), zwróci coś takiego:

e.fn.e.init[178]

i divdołącz do niego każdy obiekt DOM.

BTW, po kliknięciu prawym przyciskiem myszy w celu wybrania elementu, można uzyskać dostęp do zakresu angular.js według typu $scopena konsoli

Chen-Tsu Lin
źródło
4

Zauważ, że $$nie jest to całkiem niezłe document.querySelectorAll, ponieważ w przeciwieństwie do tej funkcji nie zwraca NodeList:

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

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

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

Więc $$(selector)jest bardziej jak Array.from(document.querySelectorAll(selector)). Oznacza to, że metody tablicowe, takie jak mapi friends, nie tylko forEach, są dostępne, gdy używasz, $$co jest całkiem przydatne.

user4642212
źródło
1

Może to być cokolwiek, tak jak $prawidłowa nazwa zmiennej, tak jak dollar.

Z ECMAScript :

Identifier ::
IdentifierName but not ReservedWord

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::
UnicodeLetter
$
_ 
\ UnicodeEscapeSequence

Najprostszym rozwiązaniem, aby zobaczyć, co to jest i gdzie jest zdefiniowane, prawdopodobnie byłoby wpisanie $()i umieszczenie punktu przerwania w tej linii.

Denys Séguret
źródło
1

Aby uzupełnić inne odpowiedzi tutaj, MooTools używa również $jako aliasu do document.getElementById.

Sprawdza, czy plik $jest zajęty, a następnie domyślnie document.id.

Sergio
źródło