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 tej i w kilku kolejnych lekcjach pokażę Ci, jak w języku JavaScript możemy
pracować z datami. I to co pokaże będzie działać zarówno w
przeglądarce internetowej, jak i w innych środowiskach, takich jak na przykład Node.js.
Jest to zatem częścią samego języka JavaScript.
Gdybyśmy chcieli odczytać sobie aktualną datę,
taką jak mamy ustawioną w systemie, to możemy utworzyć sobie taką stałą now czyli
teraz i skorzystać z takiego konstruktora new Date.
Czyli w ten sposób robimy to w języku JavaScript.
I to co się wydarzy, to do tej stałej new zostanie zwrócony obiekt, który ma różne
metody, dzięki którym będziemy mogli odczytać np.
jaka była wtedy godzina, kiedy ta linijka
się wykonała, jaki był dzień, jaki był miesiąc, jaki rok itd.
Jeżeli sobie to zapiszę to w konsoli przeglądarki będziemy mieli dostęp do tego
now i będę mógł Ci pokazać, że mamy np.
taką metodę jak getDate i ona nam zwraca dzień miesiąca, czyli dzisiaj mamy
pierwszy, a więc zwraca nam 1 i to co jest zwrócone
jest to oczywiście typ number, czyli w języku JavaScript
gdybyśmy chcieli możemy na tych liczbach dokonywać jakichś operacji, np.
arytmetycznych.
To jest zwrócenie dnia.
Następnie możemy sobie zwrócić month, czyli pobierz mi miesiąc,
natomiast tutaj jedna kluczowa uwaga, miesiące w przypadku daty są indeksowane
od zera, czyli styczeń to będzie zero, luty to będzie 1
i dzisiaj mamy pierwszy marca, więc będzie tutaj zwrócona dwójka.
A więc żeby zobaczyć, który mamy tak
naprawdę miesiąc, to dodalibyśmy sobie tutaj jedynkę i wtedy trzeci oznacza marzec.
No i mamy jeszcze taką metodę jak np.
getFullYear.
Zwróci nam to rok również jako number.
Możemy sobie tutaj pobrać jeszcze jakieś
inne rzeczy, takie jak getHours, która jest godzina itd.
Więc również będzie getMinutes
i jak widzisz getMilliseconds
natomiast to co jest ważne
tutaj coś źle wpisałem, ok,
to co jest ważne to wszystkie te rzeczy, które pobieram
one nie są jakby na żywo tzn.
jeżeli teraz zapytam, która jest godzina to nie zwróci mi tej godziny, która jest
teraz, ale ta, która była w momencie kiedy został utworzony ten obiekt.
Czyli my tutaj pracując z konsoli mamy można powiedzieć np.
po minucie nieaktualne te dane. Ale zazwyczaj w kodzie będzie tak, że po
prostu tworzymy sobie np. taką stałą i od razu coś na niej robimy, więc ona wtedy będzie
reprezentować dokładnie ten czas, w którym wykonał się nasz kod.
Wiemy zatem jak odczytywać datę, a teraz
jak moglibyśmy sobie ją wyświetlić, jak ją sformatować.
Powiem Ci, że jeżeli nie zależy Ci na tym, żeby to formatowanie było spójne,
to możesz zrobić coś takiego, że odwołujesz się do tego obiektu daty i
następnie do takiej właściwości jak toLocaleDateString.
I zauważ, że mi to zwróciło w ten sposób
ale dlatego, że mam w systemie ustawiony język angielski, więc wygląda to tak.
Ale jeżeli byśmy sobie tutaj podali jako string taki locale w przypadku polskiego
wygląda to tak, to zostanie zwrócone coś takiego.
Więc jeżeli gdzieś na stronie będziesz chciał np.
wyświetlić sobie aktualną datę możesz
skorzystać z czegoś takiego jak toLocaleDateString i w zależności od języka
użytkownika będzie to mogło trochę inaczej wyglądać.
Niemniej jednak powinno to być według jego języka dla niego czytelne i zrozumiałe.
Natomiast jeżeli chciałbyś zawsze sformatować datę w ten sam sposób, to
musimy sobie pobrać jej poszczególne komponenty, takie jak np.
dzień, miesiąc itd.
I pokażę Ci jak możemy to zrobić.
Utworzymy sobie taką stałą jak formatted, czyli sformatowany ciąg
i ja tutaj skorzystam z Template String,
żebyśmy mogli sobie interpolować pewne rzeczy.
Czyli będę chciał się najpierw odwołać do
daty i następnie do getDate, czyli pobrać sobie dzień miesiąca.
Bo chciałbym sformatować to w ten sposób żeby mieć np.
pierwszy albo 01. 03. 2021.
Coś takiego chcemy uzyskać, więc getDate zwróci nam w tym przypadku 1.
Teraz jeszcze do tego wrócimy.
Potem sobie wpiszę literalnie kropkę,
odwołam się do now.getMonth, ale +1 , bo pamiętajmy, że to nam zwraca
od zera i następnie kropka i zrobimy sobie now.getFullYear w ten sposób i
wyświetlimy sobie w konsoli właśnie ten string.
Zobaczmy jak to będzie wyglądać. Wygląda to tak.
No i teraz pozostaje kosmetyka.
Jeżeli chciałbyś tutaj na początku dodać 0 to możemy to zrobić w łatwy sposób,
czyli powiedzmy do tej jedynki też chcielibyśmy to dodać.
Powiem Ci, że na stringach w języku
JavaScript mamy taką metodę jak padStart, czyli np.
jeżeli miałbym taki string jak powiedzmy raz, dwa trzy
i skorzystam na nim z metody padStart, to na początku podaję jaka ma być
maksymalna długość tego stringu, powiedzmy, że 6 i potem co chcę dodać na początku np.
0 i zauważ jak to się zachowa.
Sprawi to, że ten string zostanie rozwinięty do 6 sześciu znaków, a skoro
były tylko 3 to 0 które podałem w tym miejscu doda na początku trzy razy.
Gdybym tutaj miał string 1, 2, 3, 4 to tylko dwa zera zostałyby dodane.
Więc jeżeli mielibyśmy taki string jak np.
1 czyli miesiąc 1 i powiem, że chcę
na początku powiem, że ma mieć on długość dwóch znaków
i na początku chcę dodać 0 to doda mi to 0.1,
natomiast jeżeli miałbym miesiąc 12 czy dzień 12 to to 0 w ogóle nie zostanie
dodane, bo ten string od początku ma już taką długość jak tutaj zadeklarowaliśmy.
Natomiast problem jest taki, że my mamy zwrócony number i jeżeli na liczbie nawet
jak byśmy ją tak opletli chcielibyśmy zrobić padStart to tam taka metoda nie istnieje.
Więc najpierw liczbę musimy w ten sposób zamienić na string podając tutaj np.
jedynkę i wtedy na tym możemy zrobić padStart
powiedzmy 2, 0 i to nam to sformatuje w taki sposób.
Czyli dokładnie taki zapis będę chciał sobie zastosować.
A więc możemy to albo zrobić tutaj,
wpisać tutaj po prostu string, zamienić to na string i następnie zrobić
to patStart albo możemy skorzystać sobie z funkcji.
Czyli utworzymy funkcję, która nam to po prostu zrobi
i będzie to bardziej czytelne.
Nazywam funkcję addZero, przekażemy tutaj jakąś
wartość liczbową i stąd po prostu zwrócimy.
Zamieniamy tę wartość liczbową na string i na tym stringu wykonujemy padStart.
Chcemy, żeby on miał maksymalnie 2 znaki i żeby na początku zostało dodane 0.
To również możesz podać jako string tutaj
dokładnie nie ma to żadnego znaczenia.
OK, i skoro mamy teraz taką fajną funkcję to ja będę chciał z tej
funkcji tutaj skorzystać addZero i po prostu przekażemy jej dzień miesiąca,
w tym przypadku dzisiaj zwraca nam to 1,
tutaj też zrobimy addZero i przekażemy sobie miesiąc.
No i w przypadku roku już tego robić nie musimy.
Zobacz, że teraz będzie to wyglądać w następujący sposób.
Jeżeli natomiast chciałbyś wyświetlić powiedzmy 01. 03. 2021, to tutaj
musielibyśmy również do tego stworzyć sobie jakąś funkcję.
Mogę Ci to również pokazać.
Stwórzmy sobie taką funkcję jak convertMonth, czyli żeby przekonwertować sobie
liczbę na odpowiednie słowo i powiedzmy, że tutaj będzie przekazywane value.
Musimy sobie stworzyć taką mapę, którą ja teraz tutaj wkleję.
Zobacz, stworzylibyśmy sobie obiekt, który ma pod kluczem 1 i styczeń, a więc jeżeli
byśmy się odwołali do tego obiektu pod Month i przekazali 1 to zwróci mi styczeń.
Jeżeli przekaże 2 zwróci mi luty, więc pod
to value do tej funkcji będziemy przekazywać właśnie 1, 2, 3 itd.
A więc stąd wystarczy zwrócić month value. I teraz tą linijkę sobie skopiuje i
wykomentuje i będziemy chcieli pozbyć się tych kropek.
Natomiast w miejscu, w którym mieliśmy
miesiąc to zamiast addZero to zrobimy sobie convertMonth.
Mam nadzieję, że to rozumiesz.
Czyli wywołujemy funkcję convertMonth i jej przekazujemy pobrany miesiąc,
w tym przypadku mi teraz zwraca 2
dodaje do tego 1, czyli przekaże do tej funkcji 3.
Pod value znajdzie się 3
i następnie odwołamy się do obiektu month podając 3, a to zwróci mi string marzec,
który zostanie podstawiony za całe to wyrażenie.
Więc zobaczmy. Teraz będzie to wyglądać następująco.
Jak zatem widzisz, date możemy pobrać w
ten sposób tworząc nowy obiekt poprzez new Date i następnie poprzez różne metody
możemy się odwoływać do poszczególnych wartości i sformatować je jak chcemy.
Natomiast jeżeli chcesz je sformatować w
jakiś domyślny sposób, możesz skorzystać z toLocalesDateString.
Mapa miesięcy · 7 min
const months = {
1: "styczeń",
2: "luty",
3: "marzec",
4: "kwiecień",
5: "maj",
6: "czerwiec",
7: "lipiec",
8: "sierpień",
9: "wrzesień",
10: "październik",
11: "listopad",
12: "grudzień",
};