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 pokażę Ci, że funkcje w języku JavaScript mogą przyjmować parametry.
I utworzymy sobie funkcję sayHello i zrobimy tutaj console.log.
Będę chciał zrobić Witaj, ale dodać tutaj również imię, które ktoś przekazał.
A więc tworząc funkcję możemy zdefiniować
jakie parametry będzie ona przyjmowała i ich liczba jest dowolna.
Czyli możemy powiedzieć, że będziemy
chcieli tutaj parametr o nazwie name i ta nazwa jest znowu dowolna.
Traktuj to jak nazwę zmiennej, czyli tutaj
jeżeli chodzi o to jakie znaki są dozwolone,
dokładnie takie same jak w przypadku tworzenia zmiennych.
Natomiast nie używamy tutaj słowa let czy const.
W ten sposób powiedzieliśmy, że przy
wywołaniu tej funkcji będzie można tam przekazać coś i to coś trafi nam pod taką
lokalną zmienną name. Więc będę mógł sobie to tutaj zinterpolować.
W ten sposób stworzyliśmy dynamiczną
funkcję, która będzie mówiła witaj i to co ktoś przekazał.
A więc wywołajmy sayHello
i powiemy sobie tutaj Piotr. A więc to Piotr
zostanie podstawione pod name i w ciele tej funkcji, czyli tylko tutaj w środku,
pomiędzy tymi nawiasami będzie dostępny właśnie ten string Piotr.
Zobaczmy. Oczywiście mamy
Witaj Piotr.
Co ważne w języku JavaScript od wersji ES6 można również tworzyć parametry domyślne.
Oznacza to tylko tyle, że jeżeli ktoś nie
poda tej wartości, to przyjmie ona wartość domyślną.
To co by się stało, gdyby to Piotr nie zostało tutaj przekazane?
Są języki programowania, w których to wygeneruje błąd dlatego, że funkcja
oczekuje parametru a nic tutaj nie podaliśmy.
Natomiast w JavaScript nie ma błędu, ale
taki parametr, który nie został podany przyjmuje wartość undefined.
Więc jeżeli sobie to będziemy chcieli wyświetlić to zobaczymy
Witaj undefined, bo tutaj to undefined na string zostało w ten sposób zamienione.
Natomiast możemy podać po znaku równości
domyślną wartość, czyli ona będzie przyjęta wtedy kiedy ktoś nic nie poda.
I możemy tutaj napisać nieznajomy i zobacz teraz będzie witaj nieznajomy.
Natomiast w momencie, w którym uzupełnimy wartość i podamy np.
Piotr, to oczywiście ona będzie miała pierwszeństwo przed wartością domyślną.
Funkcje oczywiście mogą przyjmować jeszcze więcej parametrów.
Moglibyśmy zrobić funkcję add, która by przyjmowała parametr a i b,
po przecinku je sobie oddzielamy i mogłaby np.
zwracać a+b. I oczywiście przy wywołaniu tej funkcji podali byśmy np.
10 i 5 to by zwróciło 15.
Moglibyśmy to przechwycić np. do zmiennej result.
Od wersji ES6 w JavaScript dostępny jest również tzw.
Rest operator
i będę chciał Ci teraz pokazać jak on działa.
To znaczy możemy utworzyć funkcję, gdzie
nie będziemy definiować, że ona przyjmuje np.
dwa parametry jak a i b, ale chcemy stworzyć taką funkcję, która w
zasadzie może przyjmować dowolną liczbę parametrów.
I chciałbym stworzyć taką funkcję, którą nazwiemy sum i ona pozwoli nam sumować
wszystkie liczby przekazane jako parametry.
Więc nazwijmy ją sum i następnie tutaj zrobimy takie trzy kropki i napiszemy numbers.
Czyli to jest nazwa parametru znowu dowolna.
Możesz go nazywać jak chcesz, ale ja go poprzedzić takimi trzema kropkami
to oznacza, że ten parametr będzie tablicą.
I teraz co w tej tablicy będzie?
Wyświetlmy sobie to numbers, ale oczywiście musimy wywołać tę funkcję sum.
Chodzi o to, że przekazujemy tam dowolną liczbę parametrów np.
1, 10, 100, 50 itd.
Ile chcemy parametrów tyle ich
przekazujemy, a przez ten zapis trzech kropek one wszystkie zostaną zamienione na
tablice. Czyli będziemy mieli tablicę tak jakbyśmy ją przekazali tutaj.
Jakbym zrobił tak i tu powiedział numbers, to mówię ta funkcja przyjmuje jeden
parametr, no i został przekazany jeden parametr jako tablica.
Natomiast jeżeli zrobię trzy kropki to
mówię, że tutaj dowolną liczbę parametrów można przyjmować i one staną się tablicą.
Zobaczmy w konsoli.
Jak widzisz mamy taką oto tablicę. Więc
moglibyśmy tutaj w środku zsumować wszystkie te liczby np.
tworząc zmienną result równa się 0 i teraz pętlą for of przeiterować przez całą tę
tablicę i stworzymy sobie tutaj let number of numbers.
To już Ci pokazywałem.
I do tej zmiennej result będziemy dodawać plus
równa się number i na końcu zwrócimy result.
Czyli stworzyliśmy funkcję, którą jeśli wywołamy w ten sposób, to doda nam
wszystkie te liczby, które tutaj się znajdują.
Możemy sobie to wyświetlić w console.log, żeby zobaczyć. Zobacz, mamy wartość 161, ale w
każdej chwili możemy tutaj dodać kolejny parametr i tak to będzie wyglądać.
I co ważne, jeżeli chodzi o ten operator to możemy tutaj podać więcej parametrów.
Czyli mógłbym powiedzieć coś takiego jak np.
firstNumber, a później podać coś takiego.
To by oznaczało, że pod firstNumber trafi nam jedynka, a wszystkie pozostałe
parametry zostaną zamienione na tablicę i zapisane pod numbers.
Więc czasami może to być przydatne.
I wiedz o tym, że tu nie musi być tylko jeden taki parametr.
Może być to zrobione w ten sposób.
I ostatnią rzeczą, którą Ci pokażę jest tzw. Destructuring
parametrów, również dostępny od ES6.
Wygląda to w ten sposób, że np.
utworzyli byśmy sobie funkcję displayPosition
i będzie to taka funkcja, która by przyjmowała jakiś obiekt z pozycją.
Jeżeli zrobiłbym to w ten sposób to mógłbym wyświetlić np.
pozycja myszy to i tu byśmy sobie zinterpolowali pos.x przecinek pos.y
No i teraz do tej funkcji displayPosition
musielibyśmy przekazać obiekt, który miałby x i y.
Załóżmy, że tam x to będzie np.
10 i y to będzie 100.
Zauważ, że mógłbym oczywiście ten obiekt
zapisać wcześniej zmiennej i ją tutaj podstawić, ale
również mogę go tutaj przekazać jak najbardziej bezpośrednio.
To oznacza, że cały ten obiekt znajdzie się pod pos, no i wyświetlimy pos.x i pos.y.
Pokazałem Ci to w stary sposób.
Natomiast jeżeli wiemy, że do funkcji będzie przekazany jakiś obiekt, który ma
różne właściwości, to możemy od razu dokonać tak zwanego
destructuringu i będzie to wyglądać tak, że tutaj podstawimy jakby podobny obiekt, a tak
naprawdę nie jest to obiekt i napiszemy x, y.
To sprawi, że przekazany do tej funkcji obiekt taki jak ten zostanie rozłożony i
jego x zostanie zapisane pod zmienną X, a jego y pod zmienną y i wewnątrz tej
funkcji pod x i y będziemy mieli dokładnie te wartości.
Wtedy już się nie odwołujemy do tego
całego obiektu, ale robimy coś takiego. Zobacz, efekt jest dokładnie ten sam, a my
dokonaliśmy tak zwanego destructuringu parametrów.
To zatem tyle jeżeli chodzi o parametry funkcji.
Jak widzisz, można je przekazywać w różny sposób i przekazywać ich dowolną liczbę.