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.
Skoro wiesz już jak pobrać aktualną datę,
to w tej lekcji pokażę Ci jak możemy parsować datę.
Czyli możemy mieć gdzieś informację w formie np.
string o jakiejś dacie i chcemy właśnie taki string zamienić na obiekt daty, z którego
będziemy mogli tak jak w lekcji poprzedniej wyciągać sobie jakieś dane np.
który to był rok, który dzień, miesiąc itd.
Czyli nie chcemy pracować z aktualną datą,
ale ze string zrobić obiekt daty i wtedy dopiero na nim pracować.
Więc jak możemy to zrobić?
Możemy sobie utworzyć taką stałą, którą nazwiemy np.
date i napiszemy new Date i okazuje się,
że tutaj jeżeli nic nie zrobimy to pobierzemy aktualną datę.
Natomiast jeżeli podamy tutaj string to
będziemy mogli sparsować ten string i z niego zostanie utworzona data.
Natomiast jak się domyślasz tutaj nie
możemy wpisać czegokolwiek tylko taki string, który będzie działał.
Więc jeżeli chciałbym wpisać np.
27. 03. 2021
dla nas Polaków jest to data, która ma jakiś sens,
natomiast zobaczmy czy przeglądarka sobie z tym poradzi.
Odwołam się do Date i widzimy Invalid Date.
Czyli nie jest w stanie z tego sparsować.
Natomiast jeżeli bym wpisał w takiej notacji jaka jest np.
w Ameryce napisali byśmy tutaj miesiąc czyli powiedzmy 03/27/2021
zobaczmy teraz pod date.
Okazuje się, że ta data jest już poprawnie wyświetlana.
Swoją drogą jak ją po prostu wyświetlasz w konsoli to jest na niej robione toString
i wtedy taki string się pokazuje. Więc jest na datach również taka metoda.
Więc teraz co tutaj wpisywać żeby było ok?
Możemy wpisać właśnie taką notację.
Możemy również wpisać to w ten sposób np.
27 march 2021
czyli po angielsku, też będzie ok.
Niemniej jednak powiem Ci, że zazwyczaj parsujemy datę, która jest w formie
takiego dłuższego stringu i ona do nas może być przysłana w różny sposób.
Na przykład możemy pobierać jakieś dane za pomocą
Ajax z użyciem notacji JSON
czyli dane z serwera pobieramy
i wtedy tam ta data powiedzmy przy jakimś wpisie albo przy liście użytkowników kiedy
użytkownik był zarejestrowany ta data będzie w nieco innym formacie.
I teraz to co jest ważne, żeby w języku JavaScript wszystko działało poprawnie w
każdej przeglądarce, również w tych mobilnych
zawsze zadbaj o to albo poproś osobę,
która pracuje nad kodem serwerowym, żeby dane, które Ty będziesz musiał na
front-endzie, czyli z użyciem kodu JavaScript wyświetlić
jeżeli chodzi o datę, aby ta data była
sformatowana w formacie ISO 8 6 0 1. Wtedy tak wynika z mojego doświadczenia
wszystko będzie ok. I zobacz co zrobiłem w pliku index.
Dodałem sobie tutaj taki liniowy skrypt z promocją.
Powiedzmy, że mamy na stronie jakąś promocję i taki skrypt
czyli ten fragment jest generowany na
serwerze i tutaj byśmy z serwera mówiąc brzydko wypluli taką datę i do tej daty
chcemy się odwołać z użyciem kodu JavaScript i właśnie jakoś ją móc sformatować.
I to jest właśnie format ten ISO 8601.
Czyli pamiętaj o tym, że jeżeli pracujesz
z datami to żebyś taki string właśnie w takim formacie otrzymywał.
Bo okazuje się, że jak tutaj będzie inny format i to przekażemy sobie do newDate to będzie to
działać we wszystkich np. przeglądarkach desktopowych
ale na iPhonie w przeglądarce Safari będziesz miał już problem.
I to jest problem, na który ja się natknąłem.
Przekazywany string nie parsował się do
odpowiedniej daty, a co za tym idzie licznik promocji, który wyświetlałem
nie działał poprawnie. I z tego właśnie powodu należy zadbać aby z serwera ta data
zawsze była zwracana w takim formacie ISO 8601.
To jest dokładnie ten format i teraz spróbujmy się do niego odwołać.
Skoro utworzyłem taką globalną stałą to w naszym kodzie możemy się odwołać do
promotion kropka endsAt i sobie to po prostu odczytamy.
Więc jeżeli teraz będę chciał utworzyć na
tej podstawie datę, może zróbmy sobie const promotionEndsAt
i zrobimy new Date i odwołamy się właśnie do tej globalnej
stałej PROMOTION.endsAt, co za tym idzie dokładnie ten string, który tutaj jest
można powiedzieć, że wstawiamy w to miejsce.
Ja go tutaj nie wklejam bezpośrednio,
tylko pokazałem taki przykład, żebyś wiedział, że czasami właśnie w kodzie HTML coś z
serwera tutaj może być wstawione i aby zadbać o odpowiedni format.
Zobaczmy.
I teraz jeżeli sobie wyświetlimy to promotionEndsAt to widzimy, że jest tutaj
poprawna data łącznie oczywiście z odpowiednim time zone itd.
Jeżeli chodzi o tworzenie daty może to ściśle nie jest związane z samym
parsowaniem, ale można również date tworzyć w trochę inny sposób.
Czyli jak robimy new Date to mogliśmy nic nie przekazywać tutaj.
Wtedy pobieramy aktualną datę, możemy
przekazać string, który będzie sparsowany i jak widzisz działają różne formaty.
Taki format jest ok, ale taki jak przekazaliśmy tutaj też jest ok.
Natomiast możemy również podać więcej
parametrów do tego konstruktora new date i pokaże Ci to
teraz. Powiemy sobie date2 i zrobimy new Date.
I tutaj można podawać parametry o typie number, które mówią nam kolejno rok,
możemy podać, że chcemy utworzyć datę w roku 2000 np.
o godzinie zero albo w zasadzie to będzie miesiąc.
Przepraszam, czyli tutaj będzie
miesiąc styczeń i np. godzina dwunasta.
I zobaczmy sobie teraz, co nam zwróci datę. 2.
Dokładnie tak jak wspomniałem jest to taka data.
OK, tutaj jeszcze źle ci powiedziałem.
To jest rok, miesiąc i dzień.
Czyli to jest 12 dzień tego miesiąca.
To jeszcze nie jest godzina.
I wygląda to tak jest to środa, jak
widzisz styczeń 12 roku 2000 czy 2000 i godzina jest ustawiona na 00.
Natomiast dalej możemy podawać godzinę.
Czyli możemy powiedzieć np.
15 minut 10 i powiedzmy 5 sekund.
Zobaczmy jak to będzie wyglądać.
Date 2
15:10:5 sekund i również możemy podać tutaj milisekundy, czyli nie więcej
oczywiście niż 1000, powiedzmy 500 milisekund, czyli pół sekundy.
Moglibyśmy to ustawić w ten oto sposób.
Zobaczmy, to się już tutaj nie wyświetli.
Niemniej jednak na tej dacie jest to ustawione i gdybyśmy się odwołali do
date2 i np. getMilliseconds, to oczywiście zostałoby to poprawnie zwrócone.
A więc jeszcze raz tutaj, już tym razem bez pomyłek, mam nadzieję.
Rok, następnie miesiąc, dzień, godzina, minuta, sekunda i milisekundy.
I na koniec powiem Ci jeszcze tylko o tym, że na obiekcie daty, czyli zwróconym
takiego new Date, możemy również ustawiać wartości nie tylko tworząc go.
Czyli jeżeli na tym obiekcie date2 chciałbym zmienić rok to możemy powiedzieć
date2.setFullYear i ustawili byśmy tutaj rok np.
2001.
Więc podobnie będzie z setMonth, setDate
to będzie ustawienie dnia, setMilliseconds itd.
Czyli tak jak mieliśmy w lekcji poprzedniej np.
getDate no to tutaj będzie setDate. A więc
tylko ten przedrostek się zmienia i na obiekcie daty możesz go modyfikować jeżeli
będziesz potrzebował właśnie w taki sposób.
Podsumowując zapamiętaj jedną najważniejszą rzecz.
Jeżeli będziesz miał np.
z serwera pobrane dane gdzie będzie data i chcesz mieć pewność, że ta data będzie
zawsze poprawnie sparsowana w języku JavaScript, zadbaj o to, żeby ta data
wyglądała tak jak tutaj, czyli była w formacie ISO 8601.