od Podstaw
9 godz. 20 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperJavaScript to język programowania, który napędza niemal wszystkie strony internetowe. Dopełnia on technologie HTML i CSS, za pomocą których tworzymy strukturę i wygląd dokumentu. Co jednak w sytuacji, gdy chcemy po kliknięciu w wybrany przycisk wyświetlić powiększone zdjęcie lub wczytać dodatkowe dane z serwera? To właśnie w takich sytuacjach przydaje się język JavaScript i tzw. DOM API, dostępne w przeglądarce. Jak się przekonasz, możliwości nowoczesnych przeglądarek w połączeniu z tym językiem są naprawdę ogromne.
Język JavaScript może być używany nie tylko na stronach internetowych. Z tego powodu, w kursie omówimy najpierw najważniejsze konstrukcje tego języka, które są niezależne od platformy uruchomieniowej. Dzięki temu zbudujesz fundamenty niezbędne do tego, by wykorzystać ten język np. w środowisku Node.js. Krok po kroku omówimy sposoby tworzenia zmiennych, dostępne typy danych i operatory. Następnie zobaczysz jak tworzyć tablice i obiekty, z jakich instrukcji warunkowych i pętli możesz korzystać, a także jak tworzyć własne funkcje. Przekazywana wiedza uwzględniać będzie nowości, które pojawiły się w języku wraz z rewolucyjnym standardem EcmaScript 6 (ES6).
Sam język JavaScript to nie wszystko, by tchnąć ducha w strony internetowe. Z tego powodu, przeglądarki internetowe udostępniają tzw. DOM API. To interfejs, który z użyciem języka JavaScript pozwala na manipulację treścią i wyglądem strony. W kursie bardzo dokładnie omówimy czym jest Obiektowy Model Dokumentu, a także jak z nim pracować. Zobaczysz jak tworzyć nowe elementy HTML i wstawiać je na stronę, jak modyfikować ich treść, atrybuty, style czy klasy CSS. Poznasz sposoby na odczytywanie położenia elementu na stronie i jego wymiarów, które będą niezbędne w wielu sytuacjach. Dowiesz się także, jak przypisywać obsługę zdarzeń w przeglądarce, by np. wywołać własną funkcję, gdy ktoś kliknie w wybrany przez Ciebie przycisk.
JSON to popularny format wymiany danych, a Ajax to potoczna nazwa dla asynchronicznych zapytań HTTP, które wysyłać możemy z poziomu kodu JavaScript. Dziś niemal każda strona internetowa wykorzystuje te technologie. W niektórych przypadkach jako dopełnienie podstawowej funkcjonalności witryny, a w innych jako główny motor napędzający stronę. Jeśli kiedykolwiek widziałeś, jak na stronie internetowej jakaś treść "doczytuje" się np. podczas przewijania - widziałeś w praktyce Ajax. W jednym z rozdziałów kursu zobaczysz, jak pracować z tym formatem, a także jak wysyłać wspomniane zapytania do serwera.
Choć kurs który masz przed sobą, jest kursem dla początkujących, to aby zrozumieć jak działa język JavaScript i jak z nim się współcześnie pracuje, omówimy dwa ważne tematy - zarządzanie zależnościami i bundlowanie kodu. Dowiesz się czym jest npm i jak z jego pomocą pobierać paczki gotowego kodu z internetu, a także jak sprawić, by bez trudnu dołączać je do własnego kodu. W tym celu skorzystamy z narzędzia snowpack, które pozwoli nam także na optymalizację kodu przed jego wypuszczeniem w świat. Na tym etapie omówimy również jak działają moduły ESM, pozwalające dzielić kod na mniejsze części.
Kurs podzielony został na możliwie krótkie lekcje, do których w każdej chwili możesz wrócić. Jeśli zatem zapomnisz jak odczytywać wymiary elementu na stronie, szybko odnajdziesz odpowiednią lekcję. Czym jednak była by sama teoria i proste przykłady, bez pokazania, jak połączyć je w całość i wykorzystać w praktyce? Dobra wiadomość jest taka, że w kursie stworzymy aż 5 praktycznych projektów, wykorzystujących zdobytą wcześniej wiedzę. Najpierw napiszemy program losujący Dużego Lotka, następnie dynamiczny pasek postępu przeczytania artykułu, dymek pojawiający się nad elementem po najechaniu na niego myszą, wygenerujemy tabelkę w użytkownikami na podstawie danych JSON, a na koniec tworzymy prosty odtwarzacz wideo, z możliwością pauzowania i przewijania filmu.
Kurs ten jest dla wszystkich osób, które znają już podstawy HTML i CSS i chciałyby przejść poziom wyżej i dodać do swoich stron dynamiczności. Żadna wcześniejsza wiedza z zakresu JavaScript nie jest wymagana, ale zalecana jest podstawowa wiedza z zakresu samego programowania (czym są zmienne, pętle, funkcje itd.). Materiał ten będzie również świetnym odświeżeniem i usystematyzowaniem wiedzy dla osób, które już z tym językiem miały do czynienia. Po przerobieniu tego kursu będziesz gotowy, by poznawać język JavaScript dalej i zacząć korzystać z nowoczesnych frameworków.
W tym rozdziale porozmawiamy o tym, czym
są w języku JavaScript obiekty i czym są wartości prymitywne. Dlatego, że wszystko,
co nie jest wartością prymitywną, jest traktowane jako obiekt.
Na początek wypiszę w komentarzu najważniejsze wartości prymitywne.
Będzie to string, czyli wartość tekstowa, number, boolean, undefined
i null.
Czyli wszystkie z nich już poznałeś. Boolean to
będzie true lub false, number to jakaś wartość liczbowa,
string to jest po prostu tekst. I teraz to są wartości prymitywne, a zatem
wszystko inne jest traktowane jako obiekt. I mówiąc wszystko inne mam na myśli np.
tablicę, np funkcje, które będą jeszcze później, czy np.
takie obiekty tworzone literalnie, o których powiemy w kolejnej lekcji.
Wszystko co w języku JavaScript można
reprezentować, inne niż te wymienione tutaj będzie traktowane jako obiekt.
I teraz co się wiąże z tym, że coś jest obiektem?
Otóż obiekty posiadają właściwości i
metody, do których odwołujemy się po kropce. Czyli np.
jak mieliśmy tablicę, niech tutaj będą trzy liczby,
oczywiście musimy ją przypisać poprawnie,
to traktujemy ją jako obiekt, bo jak się do niej odwołam, to po kropce mogliśmy
odczytać jej właściwości length i właściwości
to są właśnie takie rzeczy, gdzie po
prostu podajemy ich nazwę i je odczytujemy lub przypisujemy.
Natomiast metody są to funkcje, które można w taki sposób wywoływać.
Oczywiście length nie jest taką metodą, ale mieliśmy na przykład metodę push,
dzięki której mogliśmy do takiej tablicy dodać kolejny element.
A zatem tablica jest obiektem, bo po kropce można się odwołać do właściwości,
które coś odczytują lub ustawiają, albo do metod, które są funkcjami
realizującymi jakieś zadanie na tym obiekcie jakim jest tablica.
Bo zauważ, że wywołujemy push na tej
tablicy i to właśnie do niej zostanie dodany kolejny element.
Tak naprawdę jeżeli chodzi o string, number czy boolean, one mogą być
konwertowane również do wartości takich obiektowych.
I pokażę Ci teraz co mam na myśli.
Jeżeli utworzymy sobie taką stałą firstName i przypisze tutaj Piotr,
to mówiłem, że jest to wartość prymitywna, ale jeżeli chcielibyśmy zamienić tę
wartość na wielkie litery to możemy na stringach skorzystać z takiej metody jak
toUpperCase i może wyświetlmy sobie to w konsoli, więc odwołam się do firstName,
kropka,
czyli traktuję tak naprawdę tę wartość prymitywną jak obiekt, bo po kropce się
odwołuję do jej jakiejś metody i napiszemy toUpperCase,
dokładnie tak wygląda ta metoda i zauważ co się pojawi w konsoli.
Będziemy mieli to wszystko zamienione na wielkie litery.
Czyli czy to oznacza, że ta wartość nie
jest wartością prymitywną, tylko jednak jest obiektem?
Nie do końca. To jest wartość prymitywna,
ale w momencie kiedy próbujemy z niej skorzystać jak z obiektu, czyli po kropce
się do czegoś odwołać, to język JavaScript w tle konwertuje ją na obiekt taki sam,
jak moglibyśmy utworzyć za pomocą takiego konstruktora string.
To jest trochę bardziej zaawansowany temat i nie jest to coś, co jest Ci potrzebne w
większości przypadków, ale moglibyśmy utworzyć np.
lastName równa się new String.
Jest coś takiego i podali byśmy tutaj nazwisko np.
moje nazwisko.
Wtedy tutaj będziemy mieli obiekt
i na tym obiekcie możemy się odwoływać do takich metod jak np.
toUpperCase. Natomiast jeżeli utworzymy wartość
prymitywną w ten sposób ona nie jest obiektem,
można powiedzieć, że ona jest lżejsza z
punktu widzenia programu czy interpretera kodu, ale w momencie, kiedy na niej
próbujemy się odwołać do jakiejś metody, to jest ona w tle konwertowana na obiekt.
Czyli czy to oznacza, że tak naprawdę nie mamy w języku JavaScript prawdziwie
prymitywnych wartości, które nie mają żadnych właściwości i metod?
Nie do końca dlatego, że są dwie takie wartości.
Jest to undefined i null.
Na nich nigdy nie ma żadnych metod.
Czyli gdybym napisał null i spróbował się
odwołać do czegokolwiek po kropce, czyli tak jak do obiektu zawsze zwróci to błąd.
I podobnie jest z undefined.
Czyli jeżeli nawet w zmiennej mielibyśmy
lastName i byłoby to null, to jeżeli chciałbym się odwołać do lastName i np.
toUpperCase albo do czegokolwiek innego to zawsze zgłosi nam błąd właśnie z tego
powodu, że undefined i null to są zawsze wyłącznie prymitywne wartości, a te
pozostałe mogą być w locie konwertowane do obiektów.
Na przykład jeżeli chodzi o number,
gdybyśmy mieli w zmiennej czy w stałej powiedzmy
wartość 20 i coś takiego, to moglibyśmy w konsoli wyświetlić number toFixed,
to jest też taka metoda dostępna właśnie na liczbach, 2, czyli że chcemy zaokrąglić
tę liczbę do dwóch miejsc po przecinku i zwrócić ją już jako string. I zobacz.
Wyglądałoby to w taki oto sposób.
Tak więc number również w tle jest
konwertowany do takiego obiektu, który moglibyśmy stworzyć z new Number
wpisując tutaj coś takiego.
Nie zaprzątać sobie tym jakoś bardzo głowy.
O co chodzi z tymi konstruktorami i czy jest Ci to bardzo potrzebne
bo uwierz mi, że nie jest w większości
przypadków potrzebne, dlatego nie musimy się na tym jakoś bardzo skupiać.
Zapamiętaj tylko, że w języku JavaScript mamy wartości prymitywne,
takie jak string, number, boolean, undefined i null, ale część z nich, takie
jak te, mogą być przez interpreter języka JavaScript konwertowane
do prawdziwych obiektów, które zawierają jakieś metody, a te dwie wartości nie mają
żadnych metod. No i że obiektem jest w zasadzie wszystko inne
a skoro jest obiektem, to po kropce zawsze
możemy się odwołać do jakiejś właściwości lub do jakichś metod i będziemy to jeszcze
oczywiście wielokrotnie robić w tym kursie.