Dlaczego zmienna JavaScript miałaby zaczynać się od znaku dolara? [duplikat]
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
)
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.
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.
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ć?
Na przykład:
var $get = function(id) { return document.getElementById(id); }
To chyba rozsądna konwencja.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
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( ... );
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.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...
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.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.
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.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.
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.
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.
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'
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.)
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
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