Jakie jest znaczenie znaku „$” w JavaScript

167

W poniższym kodzie JavaScript znajduje się znak dolara ( $). Co to znaczy?

$(window).bind('load', function() {
    $('img.protect').protectImage();
});
coderex
źródło
1
Zobacz też: stackoverflow.com/a/553734/43615 (Dlaczego zmienna JavaScript miałaby zaczynać się od znaku dolara?)
Thomas Tempelmann

Odpowiedzi:

284

Twój fragment kodu wygląda tak, jakby odwoływał się do metod z jednej z popularnych bibliotek JavaScript (jQuery, ProtoType, mooTools i tak dalej).

W $JavaScript nie ma nic tajemniczego . $jest po prostu prawidłowym identyfikatorem JavaScript.

JavaScript dopuszcza duże i małe litery, cyfry $i _. $Miał być stosowany dla zmiennych generowanych przez komputer (np $0001).

Prototype, jQuery i większość bibliotek javascript używa $jako podstawowego obiektu podstawowego (lub funkcji). Większość z nich ma również sposób na rezygnację z $tego, aby można go było używać z inną biblioteką, która go używa. W takim przypadku jQueryzamiast $. W rzeczywistości $jest to tylko skrót do jQuery.

Nosredna
źródło
2
@Paolo: Nie jestem pewien, co masz na myśli. (Zakładam, że poprzednio mój był akceptowany.) Cóż, przynajmniej myślałem, że mój był w pełni poprawny. Zawiera trochę informacji pomocniczych, ale nie jestem pewien, czy uzasadnia to „dużo” ...
Noldorin
1
@Noldorin: pomocnicze informacje to dobra rzecz. Twoje pytanie absolutnie nie wspomniało o przyczynie użycia znaku $, o tym, dlaczego można go było użyć, ani o fakcie, że jQuery jest tylko jedną z wielu bibliotek, które go używają. Uznanie tego za akceptowaną odpowiedź oznacza, że ​​jest to najlepsza możliwa odpowiedź na pytanie, a tak nie było.
Paolo Bergantino,
+1 Jest to najpierw prawidłowy identyfikator JavaScript i często używany przez struktury JavaScript jako drugi alias.
Gumbo,
@Paolo: Często tak. Nic jednak nie wskazywało na to, że PO chciał się o tym dowiedzieć. Bezpośrednia odpowiedź też jest dobra. :) Mówiąc to, nadal zgadzam się, że to lepsza odpowiedź. Mój jedyny spór dotyczył tego, że kładziesz nacisk na konkretny punkt.
Noldorin
2
Przy okazji, przedstawiłem trochę historii funkcji $ w moim poście tutaj: stackoverflow.com/questions/1122690/jquery-and-questions/…
SolutionYogi
44

Z innej odpowiedzi :

Trochę historii

Pamiętaj, nie ma w tym nic specjalnego $. Jest to nazwa zmiennej, jak każda inna. Wcześniej ludzie pisali kod za pomocą document.getElementById. Ponieważ JavaScript rozróżnia wielkość liter, błąd podczas pisania był normalny document.getElementById. Powinienem kapitał 'b'z 'by'? Powinienem kapitał 'i'od Id?Ciebie dostać dryfu. Ponieważ funkcje są obywatelami pierwszej klasy w JavaScript, zawsze możesz to zrobić:

var $ = document.getElementById; //freedom from document.getElementById!

Kiedy pojawiła się biblioteka Prototype, nazwali swoją funkcję, która pobiera elementy DOM, jako '$'. Prawie wszystkie biblioteki JavaScript skopiowały ten pomysł. Prototype wprowadził także $$funkcję wyboru elementów za pomocą selektora CSS.

jQuery również dostosował $funkcję, ale został rozszerzony, aby akceptował wszystkie rodzaje „selektorów”, aby uzyskać żądane elementy. Teraz, jeśli już używasz Prototype w swoim projekcie i chcesz dołączyć jQuery, będziesz miał problem, który '$'może odnosić się do implementacji Prototype LUB implementacji jQuery. Dlatego jQuery ma opcję noConflict, dzięki czemu możesz uwzględnić jQuery w swoim projekcie, który używa Prototype i powoli migrować kod. Myślę, że to był genialny ruch ze strony Johna! :)

Rozwiązanie Yogi
źródło
10
var $ = document.getElementById;nie działa w przeglądarce Firefox ani Google Chrome. Zamiast tego powinieneś użyć function $(id) { return document.getElementById(id); }. Więcej informacji można znaleźć pod adresem stackoverflow.com/questions/1007340 .
Grant Wagner
Nie wiedziałem tego, dzięki Grant. Mogę potwierdzić, że działało to w IE6, jak również w Firefoksie 2, ponieważ często używałem tej techniki. Zaktualizuję mój główny post.
Rozwiązanie
42

Najprawdopodobniej jest to kod jQuery (a dokładniej JavaScript wykorzystujący bibliotekę jQuery).

$Reprezentuje funkcji jQuery , i jest w rzeczywistości alias skrótem jQuery. (W przeciwieństwie do większości języków $symbol nie jest zarezerwowany i może być używany jako nazwa zmiennej). Zwykle jest używany jako selektor (tj. Funkcja zwracająca zestaw elementów znalezionych w DOM).

Noldorin
źródło
3
Należy dodać, że $ jest takie samo jak x, może to być wszystko, co mu przypiszesz
hasen
Co oznacza ten fragment kodu: $ input.prop ('type') == 'radio';
OKGimmeMoney
21

Jak mówią wszystkie inne odpowiedzi; może to być prawie wszystko, ale zwykle jest to „JQuery”.

Jednak w ES6 jest to operator interpolacji ciągów w szablonie „dosłownie” np.

var s = "new" ; // you can put whatever you think appropriate here.
var s2 = `There are so many ${s} ideas these days !!` ; //back-ticks not quotes
console.log(s2) ;

wynik:

W dzisiejszych czasach jest tak wiele nowych pomysłów !!

Pion
źródło
2
To przydatna odpowiedź! To był ten, którego szukałem, ponieważ wiedziałem, że nie mamy jQuery ani żadnej innej biblioteki. Jest to po prostu sposób na wydrukowanie zmiennej wewnątrz większego ciągu bez używania cudzysłowów i znaków plus itp.
Oscar Bravo
4

Oprócz powyższych odpowiedzi, $nie ma specjalnego znaczenia w javascript, można go używać w nazewnictwie obiektów. W jQuery , to jest po prostu używany jako alias jQuery przedmiotu i jQuery () funkcji. Możesz jednak napotkać sytuacje, w których będziesz chciał użyć go w połączeniu z inną biblioteką JS, która również używa $, co spowodowałoby konflikt nazw. Z tego powodu w JQuery jest metoda jQuery.noConflict().

Oto przykład z dokumentacji jQuery :

<script src="other_lib.js"></script>
<script src="jquery.js"></script>
<script>
$.noConflict();
// Code that uses other library's $ can follow here.
</script>

Alternatywnie możesz również użyć podobnego

(function ($) {
// Code in which we know exactly what the meaning of $ is
} (jQuery));

Ref : https://api.jquery.com/jquery.noconflict/

Vishnu Mallipudi
źródło
3

Z dokumentacji jQuery opisującej jQuery Core Object :

Wielu programistów przedrostka $ przed nazwą zmiennych, które zawierają obiekty jQuery, aby ułatwić rozróżnienie. Nie ma nic magicznego w tej praktyce - po prostu pomaga niektórym ludziom śledzić, co zawierają różne zmienne.

Josh Britton
źródło