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, w jaki sposób możemy porównywać daty, żeby wiedzieć czy np.
jedna data była wcześniej od drugiej itd.
To może być przydatne, jeżeli będziemy np.
po dacie chcieli posortować sobie jakąś tablicę. Będziemy mieli w niej jakieś
obiekty i te obiekty będą miały właściwość związaną z datą np.
data urodzin, data utworzenia itd.
I na tej podstawie już wiesz po lekcji o sortowaniu tablic, że możemy wykonać
metodę sort z tej metody zwrócić 1, -1 lub 0.
W razie czego wróć do tej lekcji i na tej podstawie jakoś coś posortować.
No i w przypadku sortowania dat będziemy
chcieli po prostu określić, która data była wcześniej.
Dlatego utworzyłem sobie tutaj trzy takie
daty i zrobiłem to takim zapisem angielskim, żebyśmy mogli łatwo te daty
utworzyć, no i też od razu wiedzieć, która data jest wcześniejsza, która ni i będę
chciał Ci pokazać jak możemy je porównywać.
Okazuje się, że w języku JavaScript daty możemy porównywać
i zróbmy sobie to od razu w console.log
za pomocą operatora porównania mniejsza od lub większa od.
Czyli mogę zapytać czy data pierwsza jest mniejsza od data
druga. W ten sposób i mniejsza
to oznacza, że była po prostu wcześniej.
Pytanie czy 2015 rok był wcześniej niż 2010?
Raczej nie, więc oczekujemy tutaj false.
I dokładnie tak też się stało.
A więc możesz skorzystać po prostu z
takiego operatora i w języku JavaScript będzie to wystarczające.
Ale co ważne, to będzie wystarczające tylko w przypadku porównywania dat,
właśnie czy większa czy mniejsza.
Ale gdybyś chciał porównać czy dwie daty są identyczne
zauważ, że te daty date2 i date3 są takie same.
Domyślnie będzie tutaj ustawiona godzina 00, minuty 00 itd.
Więc wydaje się, że one są identyczne.
Są utworzone w taki sam sposób, więc powinny być identyczne.
Więc jeżeli będziemy chcieli za pomocą
operatora String i Quality Operator to porównać czyli date2 czy ona jest równa
date3 to się okazuje, że tutaj zostanie zwrócone false.
I tak się dzieje dlatego, że ten operator w języku JavaScript w przypadku obiektów,
a bez wątpienia tutaj mamy do czynienia z obiektami, a nie z wartościami
prymitywnymi, on porównuje je przez referencje.
Czyli gdybym powiedział, że date3 to jest to samo co date2, a więc wskazał
na ten sam obiekt, wtedy tutaj mielibyśmy true.
Natomiast w tym przypadku są to dwa zupełnie różne obiekty.
I zatem jak porównać, czy tutaj data jest dokładnie taka sama?
Można to zrobić pobierając sobie liczbę
milisekund, jakie upłynęły od pierwszego stycznia 1970 roku, a więc od tzw.
epok time. Zobacz jak to wygląda.
Jak się odwołam np. do tej daty trzeciej, to metodą getTime
mogę sobie pobrać liczbę milisekund, jaka upłynęła właśnie od tego czasu.
Ten czas to jest tzw.
Unix timestamp i jest to pierwszy stycznia 1970 roku.
Tak to zostało przyjęte.
A więc skoro możemy sobie pobrać taką liczbę, to żeby porównać dwie daty
wystarczy z obu tych dat pobrać tą liczbę i operatorem porównania
po prostu w języku JavaScript porównać dwie liczby.
Wtedy nie ma to już nic wspólnego z samą datą.
A więc wtedy zrobilibyśmy tak.
Jeżeli getTime pobrany z date2 i getTime
pobrany z date3 są równe, to te daty są równe i zostało tutaj zwrócone
true.
I przyznam Ci szczerze, że jeżeli chodzi o takie porównywanie dat
ja w języku JavaScript również porównuję
je z użyciem getTime, bo jest to dla mnie z jakiegoś powodu bardziej czytelne.
Niemniej jednak ten operator radzi sobie
dobrze i zawsze to będzie działać poprawnie.
Ale jeżeli byśmy z nich też zwrócili getTime i porównali, czy ta liczba jest
mniejsza od tej drugiej liczby, to efekt będzie dokładnie ten sam
tylko, że język JavaScript, można powiedzieć, pracuje w tym momencie już na
liczbach, które my tutaj postawiliśmy z użyciem metody getTime.
Natomiast jeżeli tego nie zrobimy, to porównuje to z użyciem tego operatora,
w jaki sposób robi to pod spodem tego nie wiemy,
natomiast działa to dokładnie tak samo.
Na koniec chciałbym Ci pokazać jeszcze jeden praktyczny przykład jak możemy
porównać daty, ale nie tak całkiem dokładnie, ale
chcielibyśmy sprawdzić, czy urodziny danego użytkownika są dzisiaj.
Z tego powodu w pliku index
stworzyłem sobie taką stałą user i dodałem mu birthdate czyli datę urodzenia.
Tutaj jest data w formacie ISO 8 6 01, czyli powiedzmy, że ten fragment byłby
wyrenderowany tutaj na serwerze mielibyśmy datę urodzenia aktualnie zalogowanego
użytkownika i powiedzmy w JavaScript chcemy odczytać tę datę i jeżeli urodziny są
dzisiaj to będziemy chcieli wyświetlić jakiś komunikat.
To teraz jak możemy to zrobić?
Nie porównamy już dat w ten sposób, bo jeżeli tutaj mamy rok 1990 to jeżeli
porównamy to z dniem dzisiejszym ta data zawsze będzie datą wsteczną.
Swoją drogą ustawimy sobie tutaj dzisiejszą datę, żeby było trochę łatwiej.
Zróbmy to w ten sposób.
OK.
Zatem najpierw będę chciał sobie utworzyć obiekt daty, który mi reprezentuje tę datę urodzin,
napiszemy sobie birthdate
i zrobimy new Date i odwołamy się do tego właśnie USER, które tam było i do birthdate.
Tak to będzie wyglądać.
A więc mamy sparsowaną datę urodzin.
Zobaczymy.
OK, mamy tutaj Invalid Date czyli zobaczmy,
prawdopodobnie tutaj coś sknociłem 03 i tu powinno być 01.
Teraz ta data powinna być poprawna.
Jak widzisz to ma znaczenie.
Pierwszy marca 1990 roku.
I teraz jak możemy to porównać?
Możemy to zrobić porównując po prostu czy dzień i miesiąc są takie same jak dzisiaj.
A więc odwołamy się do
new Date, aby pobrać sobie dzisiejszą datę i możemy to porównać
w takim dosyć długim if, więc napiszemy jeżeli now
czyli dzisiaj, w zasadzie nazwijmy sobie to today
będzie to wydaje mi się trochę bardziej jasne.
Jeżeli today pobierzemy sobie month równa się birthdate
getMonth, czyli jeżeli miesiące tych dwóch dat są takie same oraz
jeżeli today getDate czyli to nam pobiera dzień miesiąca w tym przypadku pierwszy,
jeżeli jest równy dacie urodzin getDate
to wtedy mamy pewność, że jeżeli miesiąc i dzień jest równy rok ignorujemy to
ktoś ma dzisiaj urodziny.
Zatem możemy wyświetlić dzisiaj urodziny. Zobaczmy.
Dokładnie tak też się stało.
Natomiast gdyby ten ktoś urodził się
drugiego marca, zobacz ten console.log już się nie wykona, bo
te urodziny będą dopiero jutro. Czy są jutro
moglibyśmy również sprawdzić, czy today.getDate
+1 równa się birthdate.getDate, wiedzielibyśmy, że urodziny są jutro itd.
Więc czasami jak widzisz warto operować na
tych bezpośrednich wartościach i je tutaj porównywać.
Więc można powiedzieć, że JavaScript już
nie pracuje w żaden sposób na datach tylko tymi operatorami
porównuję liczby, które są zwracane z tych metod.