Czy ktoś może wyjaśnić znak dolara w JavaScript?


378

Kod, o którym mowa, znajduje się tutaj:

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

Jaki jest cel znaku dolara w nazwie zmiennej, dlaczego nie po prostu go wykluczyć?



[odpowiedź ttony21] [1] jest błędna, twierdząc, że nie ma żadnych typów w Javascript, por. [oficjalna dokumentacja] [2] [1]: stackoverflow.com/questions/846585/… [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam

Ten wątek jest dość stary, ale wydaje się, że główne przeglądarki znormalizowały globalne vairables $, $$. Co powinno zrobić $ vs $$?
Nick Sotiros

Nic, chyba że jesteś w konsoli przeglądarki. Na przykład Chrome definiuje $ i $$ jako skróty do document.querySelectoridocument.querySelectorAll
Kevin B

Odpowiedzi:


381

„$” W zmiennej oznacza dla interpretera nic specjalnego, podobnie jak podkreślenie.

Z tego, co widziałem, wiele osób używających jQuery (taki jest dla mnie twój przykładowy kod) ma tendencję do prefiksowania zmiennych zawierających obiekt jQuery za pomocą $, aby można je było łatwo zidentyfikować i nie pomieszać z, powiedzmy, liczbami całkowitymi .

Funkcja znaku dolara $()w jQuery jest często używaną funkcją biblioteki, dlatego pożądana jest krótka nazwa.


86
Uwaga: Domyślnie jQuery używa „$” jako skrótu do „jQuery”. Wpływa to na korzystanie z innych bibliotek JavaScript. Zobacz docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya

17
Innymi słowy, $ jest porównywalny z dowolnym akceptowalnym symbolem w nazwach zmiennych / funkcji. Robienie var $=function(){}jest bardzo podobne do robienia var a=function(){}.
F-3000,

24
Thimmayya twój komentarz „Domyślnie jQuery używa„ $ ”jako skrótu do„ jQuery ”” powinno być pogrubioną czcionką u góry każdej strony w witrynie Jquery, ich przykłady są strasznie udokumentowane.
RustyH

Co powiesz na to, kiedy jako parametr funkcji podano $? Patrzę na jakiś kod, taki jak jQuery(document).ready(function($){... Następnie $ jest używane wewnątrz implementacji funkcji.
still_dreaming_1

4
@ ThrowawayAccount3Million To tylko część nazwy. W przypadku $scope$ jest jednym ze znaków o tej nazwie. Tak, jakbyś zdjął epod koniec $scope, to nie zadziała, więc zabranie $woli też nie zadziała. W przypadku, gdy widzisz coś takiego $( "a" ).addClass( "test" ), znak dolara to cała nazwa tego, co to jest.
still_dreaming_1

49

W twoim przykładzie $ nie ma specjalnego znaczenia poza byciem postacią nazwy.

Jednak w ECMAScript 6 (ES6) $ może reprezentować literał szablonu

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.

37

Znak $ jest identyfikatorem zmiennych i funkcji.

https://web.archive.org/web/20160529121559/http://www.authenticsociety.com/blog/javascript_dollarsign

To jasne wyjaśnienie, do czego służy znak dolara.

Oto alternatywne wyjaśnienie: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html


2
JavaScript ma typy; a w każdym razie, w jaki sposób znak dolara jest z tym związany? To po prostu znak, który akurat jest legalnym identyfikatorem w Javascript.
Erik Kaplun, 10.11.11

10
Nie jestem pewien, czy nazwałbym ten link „jasnym” wyjaśnieniem. Czy naprawdę potrzeba ponad 6 akapitów, aby wyjaśnić, że $ jest po prostu poprawnym znakiem podczas definiowania nazw funkcji i zmiennych?
Niewielkie

1
Wygląda na to, że pierwszy link znowu działa. Muszę zgodzić się z @Slight, że alternatywne wyjaśnienie jest okropne.
Sander Garretsen

Przykładowy kod w linku jest dość łatwy do zrozumienia. Niesamowite!
蔡宗容

32

Znak dolara jest traktowany jak zwykła litera lub znak podkreślenia ( _). Nie ma to specjalnego znaczenia dla tłumacza.

W przeciwieństwie do wielu podobnych języków, identyfikatory (takie jak nazwy funkcjonalne i zmienne) w Javascript mogą zawierać nie tylko litery, cyfry i znaki podkreślenia, ale mogą również zawierać znaki dolara . Mogą nawet zacząć od znaku dolara lub mogą składać się wyłącznie ze znaku dolara i nic więcej.

Dlatego $jest prawidłową nazwą funkcji lub zmiennej w JavaScript.

Dlaczego chcesz mieć znak dolara w identyfikatorze?

Składnia tak naprawdę nie wymusza żadnego szczególnego użycia znaku dolara w identyfikatorze, więc od ciebie zależy, jak chcesz go użyć. W przeszłości często zaleca się uruchamianie identyfikatora ze znakiem dolara tylko w wygenerowanym kodzie - to znaczy w kodzie tworzonym nie ręcznie, ale przez generator kodu.

W twoim przykładzie jednak tak nie jest. Wygląda na to, że ktoś po prostu dla zabawy umieścił znak dolara - być może był programistą PHP, który zrobił to z przyzwyczajenia lub coś takiego. W PHP wszystkie nazwy zmiennych muszą mieć przed sobą znak dolara.

W interprecie istnieje inne wspólne znaczenie dla znaku dolara: obiekt jQuery, którego nazwa składa się tylko z jednego znaku dolara ( $). Jest to konwencja zapożyczona z wcześniejszych frameworków Javascript, takich jak Prototype, a jeśli jQuery jest używany z innymi takimi frameworkami, nastąpi konflikt nazw, ponieważ obie będą używać nazwy $(jQuery można skonfigurować tak, aby używał innej nazwy dla swojego obiektu globalnego) . W Javascript nie ma nic specjalnego, co pozwalałoby jQuery używać pojedynczego znaku dolara jako nazwy obiektu; jak wspomniano powyżej, jest to po prostu kolejna ważna nazwa identyfikatora.


Możesz noktowizować obiekt jQuery za pomocą tego var $j = jQuery.noConflict();teraz $ j jest obiektem jQuery.
Justin Liu

6

Znak dolara jest używany w ecmascript 2015-2016 jako „literały szablonów”. Przykład:

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

Oto przykład praca: https://es6console.com/j3lg8xeo/ to zauważyć znak „ ` ”, to nie jest normalne cytaty.

Możesz także spotkać $ podczas pracy z biblioteką jQuery .

Znak $ w Wyrażeniach regularnych oznacza koniec wiersza.


4

Bez powodu. Być może osoba, która go zakodowała, pochodzi z PHP. Ma taki sam efekt, jakbyś nazwał go „_item” lub „item” lub „item $$”.

Jako sufiks (np. „Item $”, wymawiane „items”) może oznaczać obserwowalny element DOM jako konwencję zwaną „Notacją fińską” podobną do notacji węgierskiej.


1

Oto dobre krótkie objaśnienie filmu: https://www.youtube.com/watch?v=Acm-MD_6934

Zgodnie z Ecma International Identifier Names to tokeny interpretowane zgodnie z gramatyką podaną w sekcji „Identyfikatory” w rozdziale 5 standardu Unicode, z pewnymi niewielkimi modyfikacjami. Identyfikator to nazwa identyfikatora, która nie jest słowem zastrzeżonym ( patrz 7.6.1 ). Gramatyka identyfikatora Unicode oparta jest zarówno na normatywnych, jak i informacyjnych kategoriach znaków określonych w standardzie Unicode. Znaki w określonych kategoriach w wersji 3.0 standardu Unicode muszą być traktowane jak w tych kategoriach przez wszystkie zgodne implementacje ECMAScript. Ten standard określa określone dodatki znaków:

Znak dolara ($) i znak podkreślenia (_) są dozwolone w dowolnym miejscu w identyfikatorze .

Więcej informacji można znaleźć na stronie : http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

Ecma International jest stowarzyszeniem branżowym założonym w 1961 r. I zajmującym się standaryzacją technologii informacyjnych i komunikacyjnych (ICT) oraz elektroniki użytkowej (CE).


Chociaż ten link może odpowiedzieć na pytanie, lepiej dołączyć tutaj istotne części odpowiedzi i podać link w celach informacyjnych. Odpowiedzi zawierające tylko łącze mogą stać się nieprawidłowe, jeśli połączona strona ulegnie zmianie.
TartanLlama,

... @TartanLlama Jeśli obniżyłeś ocenę mojej odpowiedzi, przeczytaj moją zaktualizowaną odpowiedź. Dziękuję Ci.
Nomis

Nie byłem ja! Właśnie to zgłosiłem.
TartanLlama,

... ok osobie, która obniżyła głos, proszę wyjaśnić dlaczego i przeczytać moją zredagowaną odpowiedź. Dziękuję Ci.
Nomis,

5
... @TartanLlama to tylko dowodzi (ponownie), że anonimowa funkcja obniżania stosu została zmieniona. Odpowiadanie na stare pytania za pomocą zaakceptowanych odpowiedzi jest dla mnie w porządku, ponieważ uważam, że przydatne jest przeglądanie innych odpowiedzi, gdy szukam odpowiedzi.
Nomis,

1

Podczas korzystania z jQuery użycie $symbolu jako prefiksu w nazwie zmiennej jest zwyczajowo; jest całkowicie opcjonalny i służy jedynie do wskazania, że ​​zmienna zawiera obiekt jQuery, jak w twoim przykładzie.

Oznacza to, że gdy trzeba wywołać inną funkcję jQuery na obiekcie, nie trzeba go $()ponownie zawijać . Na przykład porównaj te:

// 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

Dzięki $prefiksowi zmienne już przechowujące obiekty jQuery są natychmiast rozpoznawalne, a kod bardziej czytelny i eliminuje podwójne / wielokrotne zawijanie za pomocą $().

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.