Dlaczego zmienna JavaScript miałaby zaczynać się od znaku dolara? [duplikat]

to pytanie ma już odpowiedzi tutaj : może ktoś wyjaśnić dolara w Javascript? (10 odpowiedzi) Zamknięty 9 miesięcy temu .

Dość często widzę JavaScript ze zmiennymi zaczynającymi się od znaku dolara. Kiedy / dlaczego wybrałeś prefiks zmiennej w ten sposób?

(nie pytam o $('p.foo') składnię, którą widzisz w jQuery i innych, ale normalne zmienne, takie jak $name i $order)

Author: Yi Jiang, 2008-10-15

16 answers

Bardzo powszechnym zastosowaniem w jQuery jest odróżnienie jQuery obiektów przechowywanych w zmiennych od innych zmiennych.

Na przykład zdefiniowałbym:

var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself

Uważam, że jest to bardzo pomocne w pisaniu kodu jQuery i ułatwia zobaczenie obiektów jQuery , które mają inny zestaw właściwości.

 1449
Author: jonstjohn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-04-19 13:36:42

W pierwszej, drugiej i trzeciej edycji ECMAScript użycie nazw zmiennych poprzedzonych prefiksem $było wyraźnie zniechęcane przez specyfikację, z wyjątkiem kontekstu kodu autogeneracyjnego:

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

Jednak w kolejnej wersji (5th Edition , która jest aktualna) ograniczenie to zostało zniesione, a powyższy fragment zastąpiony

Znak dolara ($) i podkreślenie (_) są dozwolone w dowolnym miejscunazwy identyfikacyjnej .

Jako taki, znak $ może być teraz swobodnie używany w nazwach zmiennych. Niektóre frameworki i biblioteki mają swoje własne konwencje co do znaczenia symbolu, zaznaczone w innych odpowiedziach tutaj.

 255
Author: cic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-04 14:37:08

Jak już inni wspominali, znak dolara ma być używany przez generowany mechanicznie kod. Jednak ta konwencja została złamana przez niektóre szalenie popularne biblioteki JavaScript. JQuery, Prototype I MS AJAX (AKA Atlas) używają tego znaku w swoich identyfikatorach (lub jako całego identyfikatora).

W skrócie możesz używać $ Kiedy tylko chcesz. (Tłumacz nie będzie narzekał. Pytanie tylko, kiedy chcesz go użyć?

Ja osobiście nie używam, ale myślę, że jego użycie jest słuszne. Myślę, że MS AJAX używa go do oznaczenia, że funkcja jest aliasem dla jakiegoś bardziej gadatliwego wywołania.

Na przykład:

var $get = function(id) { return document.getElementById(id); }
To chyba rozsądna konwencja.
 61
Author: Benry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-24 05:55:20

W kontekście AngularJS, prefiks $ jest używany tylko dla identyfikatorów w kodzie frameworka. Użytkownicy frameworka są poinstruowani, aby nie używać go w swoich własnych identyfikatorach:

Kątowe Przestrzenie nazw $ i $$

Aby zapobiec przypadkowym kolizjom nazw z kodem, przedrostki kątowe dodają nazwy obiektów publicznych za pomocą $ i nazw obiektów prywatnych za pomocą $$. Proszę nie używać prefiksu $ lub $$ w kodzie.

Źródło: https://docs.angularjs.org/api

 56
Author: Travis Watson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-17 14:43:59

Byłem osobą, która zapoczątkowała tę konwencję w 2006 roku i promowała ją na wczesnej liście dyskusyjnej jQuery, więc pozwól mi podzielić się trochę historii i motywacji wokół niej.

Przyjęta odpowiedź daje przykład:

var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself

Ale to nie ilustruje tego dobrze. Nawet bez $, nadal mielibyśmy tutaj dwie różne nazwy zmiennych, email i email_field. To dużo dobrego. Dlaczego mielibyśmy rzucać $ w jedno z imion, gdy masz już dwa różne nazwiska?

Właściwie nie użyłbym email_field tutaj z dwóch powodów: names_with_underscores nie są idiomatycznym JavaScript, a field nie ma sensu dla elementu DOM. Ale podążałem za tym samym pomysłem.

Próbowałem kilku różnych rzeczy, wśród nich coś bardzo podobnego do przykładu: {]}

var email = $("#email"), emailElement = $("#email")[0];
// Now email is a jQuery object and emailElement is the first/only DOM element in it

(oczywiĹ "cie obiekt jQuery moĹźe mieÄ ‡ wiÄ ™ cej niĹź jeden element DOM, ale kod, nad ktĂłrym pracowaĹ 'em miaĹ' duĹźo selektorăłw id, wiÄ ™ c w tych przypadkach byĹ' korespondencja 1:1.)

Miałem inny przypadek, w którym funkcja otrzymała element DOM jako parametr i potrzebowała do tego obiektu jQuery:

// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
    var emailJQ = $(email);
    // Now email is the DOM element and emailJQ is a jQuery object for it
}
To trochę zagmatwane! W jednym z moich bitów kodu email jest obiektem jQuery, a {[19] } jest elementem DOM, ale w drugim {[11] } jest elementem DOM, a emailJQ jest obiektem jQuery.

Nie było konsystencji i ciągle je mieszałem. Plus to było trochę uciążliwe, aby ciągle musiał wymyślać dwa różne nazwy dla tej samej rzeczy: jedna dla obiektu jQuery, a druga dla pasującego elementu DOM. Poza tym email, emailElement, i emailJQ, próbowałem też innych odmian.

Wtedy zauważyłem wspólny wzór:

var email = $("#email");
var emailJQ = $(email);

Ponieważ JavaScript traktuje $ jako po prostu kolejną literę nazw, a ponieważ zawsze otrzymywałem obiekt jQuery z wywołania $(whatever), wzorzec w końcu mnie olśnił. Mógłbym zadzwonić i po prostu usunąć kilka znaków, a to wyjdzie z ładne imię:

$("#email")
$(email)

Strikeout nie jest idealny, ale może wpadniesz na pomysł: po usunięciu niektórych znaków obie te linie wyglądają następująco: {]}

$email
Wtedy zdałem sobie sprawę, że nie muszę wymyślać konwencji takiej jak emailElement Czy emailJQ. Był już fajny Konwent: weź kilka znaków z połączenia $(whatever) i zamienia się w $whatever.
var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object

I:

// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
    var $email = $(email);
    // $email is the jQuery object and email is the DOM object
    // Same names as in the code above. Yay!
}

Więc nie musiałem wymyślać dwóch różnych nazwisk cały czas, ale mogłem wystarczy użyć tej samej nazwy z przedrostkiem $ lub bez niego. A prefiks $ był miłym przypomnieniem, że miałem do czynienia z obiektem jQuery:

$('#email').click( ... );

Lub:

var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );
 41
Author: Michael Geary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-02-01 09:10:42

Stevo ma rację, znaczenie i użycie znaku dolara (w Javascript i platformie jQuery, ale nie w PHP) jest całkowicie semantyczne. $ to znak, który może być użyty jako część nazwy identyfikatora. Ponadto znak dolara nie jest chyba najbardziej "dziwną" rzeczą, jaką można napotkać w Javascript. Oto kilka przykładów poprawnych nazw identyfikatorów:

var _       = function() { alert("hello from _"); }
var \u0024  = function() { alert("hello from $ defined as u0024"); }
var Ø       = function() { alert("hello from Ø"); }
var $$$$$   = function() { alert("hello from $$$$$"); }

Wszystkie powyższe przykłady będą działać.

Spróbuj.
 21
Author: Matt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-05 15:42:52

Znak $ nie ma specjalnego znaczenia dla silnika JavaScript. To po prostu kolejny ważny znak w nazwie zmiennej jak a-Z, A-Z,_, 0-9, itd...

 7
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-28 15:26:12

Ponieważ _ Na początku nazwy zmiennej jest często używana do wskazania prywatnej zmiennej (lub przynajmniej jednej, która ma pozostać prywatna), uważam, że $ jest wygodna do dodawania przed własnymi krótkimi aliasami do bibliotek kodu ogólnego.

Na przykład, gdy używam jQuery, wolę używać zmiennej $J (zamiast tylko $) i używać $P gdy używam php.js itp.

Prefiks sprawia, że wizualnie odróżnia się od innych zmiennych, takich jak moje własne zmienne statyczne, sklejając mnie w fakt, że kod jest częścią jakiejś biblioteki lub innej, i jest mniej prawdopodobne, aby kolidować lub zdezorientować innych, gdy znają konwencję.

Nie zaśmieca kodu (ani nie wymaga dodatkowego wpisywania), podobnie jak w pełni określona nazwa powtarzana przy każdym wywołaniu biblioteki.

Lubię myśleć, że jest podobny do tego, co robią klawisze modyfikujące, aby rozszerzyć możliwości pojedynczych klawiszy.

Ale to tylko moja własna konwencja.
 2
Author: Brett Zamir,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-05-04 14:52:43

${varname} to tylko konwencja nazewnictwa jQuery deweloperzy używać do rozróżniania zmiennych, które zawierają elementy jQuery.

Plain {varname} jest używany do przechowywania ogólnych rzeczy, takich jak teksty i ciągi. ${varname} przechowuje elementy zwracane z jQuery.

Możesz użyć plain {varname} do przechowywania elementów jQuery, ale jak powiedziałem na początku to odróżnia go od zwykłych zmiennych i znacznie ułatwia zrozumienie (wyobraź sobie mylenie go ze zwykłą zmienną i wyszukiwanie wszędzie do zrozumieć, co posiada).

Na przykład:

var $blah = $(this).parents('.blahblah');

Tutaj bla przechowuje zwracany element jQuery.

Więc, gdy ktoś inny zobaczy $blah w kodzie, zrozumie, że nie jest to tylko ciąg znaków lub liczba, to element jQuery.

 2
Author: Satyabrata Mishra,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-21 10:01:03

Jak doświadczyłem przez ostatnie 4 lata, pozwoli to komuś łatwo zidentyfikować, czy zmienna wskazująca wartość / obiekt, czy Element Dom zawinięty w jQuery

Ex:
var name = 'jQuery';
var lib = {name:'jQuery',version:1.6};

var $dataDiv = $('#myDataDiv');

W powyższym przykładzie kiedy widzę zmienną "$dataDiv " mogę łatwo powiedzieć, że zmienna ta wskazuje na element Dom zawinięty w jQuery (w tym przypadku jest to div). i również mogę wywołać wszystkie metody jQuery z out zawijania obiektu ponownie jak $dataDiv.append (), $dataDiv.html(), $dataDiv.find () zamiast $($dataDiv).append ().

Mam nadzieję, że to pomoże. więc wreszcie chcę powiedzieć, że będzie to dobrą praktyką, aby przestrzegać tego, ale nie obowiązkowe.
 2
Author: Naga Srinu Kapusetti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-05 19:27:20

Chociaż można go po prostu użyć do prefiksu identyfikatorów, powinien on być używany do generowanego kodu, na przykład do tokenów zastępczych w szablonie.

 0
Author: Ryan Abbott,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-15 18:33:48

Angular używa is Dla właściwości generowanych przez framework. Domyślam się, że idą według (obecnie nieistniejącej) podpowiedzi dostarczonej przez ECMA-262 3.0.

 -1
Author: Manish Jhawar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-18 14:07:05

$ jest używany do rozróżniania zmiennych zwykłych i zmiennych jquery w przypadku zmiennych normalnych. pozwala złożyć zamówienie w FLIPKART następnie jeśli zamówienie jest zmienną pokazującą ci wyjście string to jest o nazwie simple jako" order "ale jeśli klikniemy na Złóż zamówienie to obiekt zostanie zwrócony, że obiekt zostanie oznaczony przez $ jako "$order " tak, że programista może w stanie wyciąć zmienne javascript i zmienne jquery w całym kodzie.

 -3
Author: Saurabh Saluja,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-05-04 09:59:06

Jeśli widzisz znak dolara ( $ ) lub podwójny znak dolara ( $ $ ) i jesteś ciekawy, co to oznacza w prototypowym frameworku, Oto Twoja odpowiedź:

$$('div');
// -> all DIVs in the document.  Same as document.getElementsByTagName('div')!

$$('#contents');
// -> same as $('contents'), only it returns an array anyway (even though IDs must be unique within a document).

$$('li.faux');
// -> all LI elements with class 'faux'

Źródło:
http://www.prototypejs.org/api/utility/dollar-dollar

 -4
Author: RussellW,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-07-20 22:03:53

Powód, dla którego czasami używam nazw php-konwencje ze zmiennymi javascript: Podczas sprawdzania poprawności danych wejściowych chcę uruchomić dokładnie te same algorytmy po stronie klienta, i po stronie serwera. Naprawdę chcę, aby obie strony kodu wyglądały tak podobnie, jak to możliwe, aby uprościć konserwację. Używanie znaków dolara w nazwach zmiennych ułatwia to.

(również niektóre funkcje pomocnicze pomagają upodobnić kod, np. zawijanie input-value-lookups, inne niż oo wersje strlen, substr, itp. Informatyka nadal wymaga jednak ręcznego dostosowania.)

 -5
Author: not-just-yeti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-23 13:45:34

Poprawny identyfikator JavaScript musi zaczynać się od litery, podkreślenie ( _ ) lub znak dolara ($); kolejne postacie mogą również być cyframi (0-9). Ponieważ JavaScript uwzględnia wielkość liter, listy zawierać znaki od "A" do " Z " (wielkie litery) oraz znaki od "A" do " z "(małe litery).

Details:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Grammar_and_types#Variables

 -7
Author: Harikesh Yadav,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-02 02:26:56