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.
Do tej pory zobaczyłeś już kilka metod tablic takich jak np.
push czy unshift, a także pop
a teraz będę chciał Ci pokazać jeszcze kilka z tych najbardziej przydatnych. Więc
szybko utworzę sobie jakąś tablicę, może 1, 2, 33, 0, 7 czy 8 i 5.
To nie ma większego znaczenia. Na tej tablicy będziemy sobie operować.
Pokażę Ci teraz metodę slice, która
pozwala nam wyciąć jakiś kawałek tablicy i utworzyć z tego nową tablicę.
Więc powiedzmy, że chcielibyśmy utworzyć
nową tablicę, gdzie będzie połowa tej oryginalnej tablicy.
Utworzymy sobie stałą, gdzie będziemy chcieli to przechwycić nazwę ją Half jak
połowa i odwołam się do tej oryginalnej tablicy i na niej wywołam metodę slice.
I metoda slice działa w ten sposób, że podajemy, od którego indeksu chcemy
zacząć wycinanie, a także do którego indeksu chcemy wyciąć.
Czyli jeżeli chcę wyciąć połowę tablicy,
to zaczniemy od początku, a więc od indeksu 0.
Zatem podaję liczbę 0. Po przecinku
podaję drugi parametr, do którego indeksu chcę wycinać, czyli 0, 1, 2.
Jeżeli wpiszemy tutaj 2.
Zobaczmy i w konsoli wyświetlimy sobie
tę tablicę, to będziemy tutaj mieli pierwszy element i drugi.
Czyli nie wycięliśmy jeszcze połowy, bo powiedzieliśmy, że do drugiego indeksu,
czyli to jest 0, 1, 2 dotąd chcemy wyciąć, ale bez uwzględnienia tego indeksu.
Czyli jeżeli chcemy połowę, musimy tutaj podać liczbę o 1 większą.
W ten sposób wycięliśmy sobie połowę tej tablicy
i teraz pytanie czy oryginalna tablica się zmieniła, czy nie?
Możemy to oczywiście sprawdzić wyświetlając ją w konsoli.
Jak możesz zobaczyć, ona nie została zmodyfikowana.
Czyli to jest ważne o tyle, że arr.slice tworzy nam nową tablicę, nie modyfikując
tej, na której wywołaliśmy tę metodę.
A na przykład metoda pop, z której usunęliśmy ostatni element tablicy,
on był dla nas zwracany, ale także był z tej tablicy usuwany.
Czyli tamte metody modyfikowały tablicę, na której zostały wykonane,
ta metoda tej tablicy nie modyfikuje, ale tworzy nową tablicę.
Ciekawą metodą, która również może nam się
przydać może sobie ją zrobimy w konsoli jest arr.join, która pozwala nam połączyć
wszystkie elementy tablicy, które tam się znajdują.
Ona będzie przydatna przy liczbach albo
przy ciągach znaków na takim separatorze, który tutaj podamy.
Czyli jeżeli będę chciał połączyć
wszystkie elementy na przecinku i spacji, zobacz, podałem to po prostu jako string,
mógłbyś to mieć w jakieś zmiennej i tutaj przekazać, to
to wszystko połącz nam tą tablicę dodając
właśnie przecinki i zwróci nam to wszystko jako string.
Możemy zobaczyć. Będzie to wyglądać następująco.
Gdybyś chciał to połączyć np.
na takim pipe, możesz go podać jak
najbardziej, wtedy będzie to wyglądać w ten oto sposób.
Więc w ten sposób łączymy wszystkie elementy i wynikiem jest zawsze zwrócony
ciąg znaków. Czyli zawsze będzie to string. To co zostanie zwrócone z metody join.
Bardzo przydatną metodą jest metoda includes.
Zobaczmy, ona nam zwraca true lub false
jeżeli chcemy zapytać czy w jakiś tablicy znajduje się jakiś element.
Więc jeżeli zapytamy czy arr.includes czy zawiera 33,
zobaczmy co się pojawi w konsoli,
mamy true. Bo taki element tam się znajdował.
Jeżeli podamy jakiś, którego tam nie ma, zostanie zwrócone false.
A więc warto np.
w instrukcjach warunkowych gdzieś możemy mieć if arr.includes jakąś wartość,
warto to stosować właśnie tam.
Inną ciekawą metodą jest metoda concat, która pozwala nam połączyć dwie tablice.
Więc zrobimy to bezpośrednio w console.log,
ale oczywiście moglibyśmy utworzyć jakąś
stałą, gdzie zapiszemy sobie taką nową tablicę.
Ja to zrobię bezpośrednio w console.log.
Czyli będziemy chcieli do tej oryginalnej tablicy dołączyć tą tablicę,
połowiczną, którą sobie stworzyliśmy, bo teraz to są dwie zupełnie osobne tablice.
Mam ją tutaj, więc możemy zrobić coś takiego, arr.concat,
czyli na tej tablicy wywołujemy concat mówiąc połącz z tą tablicą
kolejną tablicę, którą należy tutaj przekazać i przekażemy ją
tutaj tablicę jej tą tablicę, którą mamy pod stałą half.
I to stworzy nam nową tablicę.
I znowu pytanie czy to zmodyfikował tablicę arr?
Sprawdźmy.
Zobacz nie zmodyfikował tej tablicy. Czyli concat
połączyło nam jedną tablicę z inną i zwróciło to jako zupełnie nową tablicę, a
oryginalna tablica nie została w żaden sposób zmodyfikowana.
Z innych metod, które mogą się przydać, do których przekazujemy tzw.
funkcję callback to jest np.
metoda forEach.
A więc możemy powiedzieć arr.forEach,
a więc dla każdego elementu tej tablicy tutaj są te elementy,
wywołaj taką funkcję, gdzie przekażemy po prostu ten element.
Możemy sobie tutaj nazwać parametr np.
value, ale oczywiście ta nazwa jest dowolna
tak jak to bywa przy funkcjach i możemy sobie np.
w console.log wyświetlić taką wartość.
Czyli ta funkcja zostanie wywołana dla
każdego elementu. Za pierwszym razem zostanie wywołana i pod value
podstawione zostanie 1, potem 2, potem 33 itd.
Więc co nam wyświetli wszystkie te console.logi w taki sposób.
Natomiast tu można przyjąć jeszcze kilka parametrów np.
możemy przyjąć index, a także array czyli odwołanie do całej tej tablicy.
Czyli wtedy mielibyśmy pod value podstawione np.
1, a pod index 0,
za drugim razem pod value byłoby 2, index to byłoby 1 itd.
Więc warto wiedzieć, że tutaj również można się odwołać do takich parametrów,
jeżeli byłyby one dla nas w jakiś sposób pomocne.
Inną ciekawą metodą jest np.
arr.filter, która pozwala nam odfiltrować pewne elementy z tablicy.
Więc wyobraź sobie, że chcielibyśmy
utworzyć tablicę z elementami takimi, które są większe od 5. I będzie to nowa
tablica, więc stworzę sobie taką stałą gdzie powiem gt5 czyli Greater than 5.
To jest tylko nazwa i odwołamy się do arr.filter i tej
metodzie również przekazujemy funkcję callback.
Ona otrzyma tak jak w przypadku forEach pojedynczą wartość.
I teraz jeżeli z tej funkcji zwrócimy
true, to ta wartość znajdzie się w nowo tworzonej tablicy,
jeżeli zwrócimy false to się nie znajdzie.
Więc pod value na początku będziemy mieli np.
1 i możemy po prostu zwrócić czy value jest większa od 5. Czy 1 jest większa od 5?
Nie jest.
Czyli tu zostanie zwrócone false, a więc jedynka nie znajdzie się w nowej tablicy,
dwójka też nie, ale 33 i 8 już się znajdzie.
Czyli pod gt5 powinniśmy mieć nową tablicę, gdzie będzie 33 i 8.
Zobaczmy.
Dokładnie tak się stało.
No i oczywiście to może być bardzo przydatne
później, kiedy w tych tablicach będziemy
mieli inne rzeczy niż liczby. Tu będą mogły być jakieś obiekty,
będziemy mogli na podstawie jakiegoś słowa, które ktoś wpisze powiedzmy w
wyszukiwarce przeszukiwać wszystkie jakieś wpisy albo jakieś dane w tabelce i zwracać
tylko te, które będą zawierały taki tekst itd.
Więc ta metoda filter oczywiście tutaj w dowolny
sposób w środku może filtrować, to możemy mieć dowolne warunki,
ważne żeby zwróci true lub false i wtedy taki element znajdzie się w nowej tablicy,
jeżeli zwrócimy false to się nie znajdzie.
I to oczywiście też nie modyfikuje oryginalnej tablicy, tylko tworzy zupełnie
nową, która została tutaj do tej stałej przypisana.
No i może skorzystamy z jeszcze jednej podobnej metody.
Jest to arr.map, też tworzy nam nową tablicę.
Zaraz zobaczysz jak to wygląda.
Nazwiemy ją sobie negative, bo chciałbym wszystkie liczby, które tutaj
mamy odwrócić tak aby zapisać ich ujemne wartości. Więc odwołamy się znowu do arr
metoda nazywa się map i jej też przekazujemy funkcję, która otrzymuje taką pojedynczą
wartość i to co zwrócimy to będzie element nowej tablicy.
Czyli na początku pod value dostaniemy 1 i jak np.
zwrócę 1 razy -1 to będzie -1.
Czyli zwracam sobie value razy minus 1. A więc
każdy element tutaj pod value zostanie podstawiony, potem będzie tu dwójka
i jak zrobię 2 razy -1 zostanie zwrócone -2.
Czyli nowa tablica będzie zawierała wtedy te elementy jakby odwrócone.
Będą to wartości ujemne.
Zobaczmy.
No i rzeczywiście tak się stało.
Łącznie z zerem w JavaScript jest taka wartość jak minus zero.
Na koniec chcę Ci pokazać jeszcze w dokumentacji na Mozilla.org, że możemy
skorzystać jeszcze z wielu innych metod, które są dostępne na tablicach.
Nie będę ich wszystkich tłumaczył.
Powiem Ci szczerze, że to jest tak, że jak uczysz się programowania i
jak tworzysz kolejne przykłady, to dopiero wtedy zazwyczaj zdobywasz taką wiedzę,
czyli sięgasz po jakieś metody, które wydaje Ci się, że mogą być przydatne,
dlatego polecam Ci, żebyś je po prostu
przejrzał poeksperymentował z nimi, zrobił sobie jakieś notatki,
ale niekoniecznie musisz je wszystkie wkuwać na pamięć.
Wszędzie gdzie widzisz tutaj array.prototype i później np.
every, to to every to jest właśnie nazwa tej metody.
Czyli moglibyśmy sobie tutaj zrobić arr.every
i to będzie dokładnie to, co masz tutaj. Więc możesz sobie kliknąć zobaczyć
przykład jak to wygląda, na czym to polega.
Tutaj znajdziesz wszystkie metody, które są właśnie dostępne na obiekcie Array.