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.
Teraz omówimy funkcje strzałkowe, czyli tzw. arrow functions.
Jest to coś, co zostało dodane do języka JavaScript od standardu ES6,
również jest szeroko wspierane w przeglądarkach.
Teraz jak wygląda taka funkcja strzałkowa?
Najpierw utworzę sobie zwykłą funkcję sayHello,
żeby móc po prostu pokazać Ci różnicę.
Będzie przyjmowała parametr name i będzie po prostu robiła console.log
i tutaj sobie zinterpolujemy. Witaj
name.
Możemy dodać tutaj jeszcze wykrzyknik.
To jest standardowo utworzona funkcja.
A teraz pokażę Ci jak utworzyć funkcję
strzałkową, która będzie realizowała dokładnie to samo.
I teraz funkcja strzałkowa
w domyśle nie ma nazwy, bo tutaj podawaliśmy nazwę tej funkcji, a w
przypadku funkcji strzałkowej będziemy ją przypisywać np.
do zmiennej. Czyli utworzę sobie zmienną sayHello,
tutaj będziemy mieli podkreślenie, bo nie
mogę utworzyć takiej stałej, jeżeli funkcja już się tak nazywa, ale zaraz tę
funkcję wykomentuje. I teraz przypisuje do niej utworzoną anonimowo funkcję strzałkową,
czyli taką, która nie ma nazwy, bo im się nie da przypisać nazwy.
Ta funkcja wygląda tak, że podajemy sobie
coś takiego strzałkę i następnie może tutaj być blok kodu, ale być go nie musi.
Możemy to również uprościć.
Ja to zaraz wytłumaczę.
Napiszemy name, czyli że ta funkcja ma
przyjmować taki parametr i ma zwracać console.log,
w zasadzie to samo co tutaj wyżej, więc sobie to skopiuję,
ok i skomentuję tę funkcję,
a wywołam funkcję sayHello przypisaną do stałej, bo chcę Ci tylko pokazać, że mogę
tutaj przekazać Piotr, że będzie to działać dokładnie tak samo.
Mamy Witaj Piotr.
I teraz funkcja strzałkowa na pierwszy rzut
oka jest bardzo nieczytelna, ale jak się już do tego przyzwyczaisz, to naprawdę ja
często z tych funkcji korzystam i są one dla mnie i czytelne i wygodne w użyciu.
Więc ta funkcja działa tak, że na początku
podajemy parametr jaki będzie przyjmować i nie trzeba tutaj żadnych nawiasów.
Natomiast gdyby ona przyjmowała dwa parametry np.
byłoby to a i b, to wtedy musiałaby tutaj mieć takie nawiasy.
Czyli to jest dokładnie to samo co te nawiasy u góry.
Natomiast jak przyjmuje jeden parametr, to nawiasu być nie musi.
Następnie mamy tą słynną strzałkę, od
której nazwa się wzięła i mamy to co ta funkcja zwraca.
Czyli ta strzałka mówi, że to co jest dalej zostanie z tej funkcji zwrócone.
W tym przypadku to zostanie wywołane, no i
console.log nic nie zwraca, więc nic nie zostanie zwrócone.
Ale gdybyśmy stworzyli funkcję add zobacz i byłaby to funkcja strzałkowa,
która przyjmowałaby a i b i robiłaby coś takiego a+ b to mówimy, że ta funkcja
przyjmie jakieś dwa parametry i je do siebie doda i zwróci.
Czyli nie musimy tutaj używać słowa return.
Tak wygląda właśnie ciało tej funkcji.
Może tutaj być proste wyrażenie.
Nie zmienia to jednak faktu, że taka
funkcja może mieć ciało funkcji i może korzystać z słowa return.
Więc będę chciał Ci teraz to pokazać.
Stworzymy sobie podobną funkcję lottery jak mieliśmy już wcześniej
i ona nic nie będzie przyjmować, więc wtedy zapisujemy ją w ten sposób i funkcja
strzałkowa może mieć ciało funkcji zapisywane właśnie tak.
Oczywiście jeśli chodzi o to formatowanie, ono jest dowolne.
I teraz ta funkcja można powiedzieć, że nic nie zwraca
bo dopiero muszę sam użyć słowa return.
Tutaj nie użyłem takich nawiasów.
Zauważ to jest bardzo ważne.
Więc ta strzałka mówiła, że to wyrażenie
zostanie wyliczone i zwrócone tak jak poprzez return.
Natomiast jak dodałem takie nawiasy do
funkcji strzałkowej to już muszę ręcznie użyć słowa return i w środku zrobimy to samo co
w jednej z poprzednich lekcji, pomnożymy sobie razy 100 i jeśli to jest
mniejsze od 50 to zwracamy przegrałeś, natomiast w przeciwnym wypadku zwracamy
wygrałeś. I w ten sposób utworzyliśmy funkcję strzałkową, która działa identycznie
jak ta nasza zwykła funkcja, którą mieliśmy wcześniej
i jak widzisz, jak najbardziej w środku możemy również korzystać z return.
Mógłbyś zatem zapytać jaka jest różnica pomiędzy funkcją strzałkową a zwykłą
funkcją, poza tym, że zapisuje się ją w nieco inny sposób?
Jest jedna niezwykle istotna różnica, którą chcę Ci teraz pokazać.
Utworzę obiekt person, który już też widzieliśmy w tym kursie.
Będzie miał firstName Jan lastName, powiedzmy Kowalski i chciałbym
w środku utworzyć mu metodę, czyli funkcję sayHello.
I jak tworzyliśmy ją w taki standardowy
sposób, czyli przypisywałem ją tak albo w skróconym zapisie przypisałem ją tak
to mogłem zrobić w środku np.
return albo zróbmy console.log, bo to nam się od razu wyświetli.
Nazywam się i mogłem tutaj zinterpolować
this.firstName i to this kierowało na ten obiekt person i następnie this.lastName.
Po wywołaniu takiej funkcji oczywiście console.log,
nie console.log nie jest już potrzebny.
Zróbmy person
sayHello.
Zobaczymy Nazywam się Jan Kowalski.
Natomiast gdybym w środku tę funkcję utworzył jako funkcję strzałkową, czyli
zrobił coś takiego i powiedział, że jest to funkcja strzałkowa
mógłbym ją zapisać tak
ona nic nie musi zwracać.
Zobacz, co się stanie. Zobaczymy
Nazywam się undefined i undefined.
I teraz jaka jest różnica pomiędzy właśnie funkcją strzałkową a zwykłą funkcją?
Właśnie taka, że tam this zawsze kieruje na to co powyższy zakres.
Czyli to this nie jest ustawiane przez ten
obiekt, ale kieruje w tym miejscu dokładnie na to samo na co kieruje this
tutaj.
Jeżeli chodzi o to this w JavaScripcie to potrafi być bardzo skomplikowane, ale
powiem Ci, że w tym miejscu this to jest to samo co window.
Czyli my w tym momencie odwołaliśmy się do window.first_name i do window.last_name.
Zapamiętaj zatem tyle, że jak tworzymy funkcję strzałkową, to w niej this może
kierować na coś zupełnie innego niż w przypadku normalnej funkcji, bo nie ma
możliwości wymuszenia na co to this ma kierować.
A jest to możliwe do zrobienia w języku JavaScript.
W większości jednak przypadków to nie
będzie miało dużego znaczenia i możemy z tych funkcji korzystać po prostu dla
wygody, gdzie chcemy sobie skrócić jakiś zapis.