Nowy Standard JavaScript
10 godz. 43 min · JavaScript · Full-stack i Programowanie
Piotr PalarzWeb DeveloperNa początku dowiesz się jakie nowości pojawiły się w języku, jeśli chodzi o tworzenie zmiennych i stałych. Poznasz dwa nowe słowa let i const, a także dokładnie omówimy ich różnice, względem znanego nam do tej pory słowa var. Następnie poruszymy temat obiektów. Zobaczysz jak nowy zapis pozwoli znaczenie ułatwić nam pracę i sprawić, by kod był bardziej czytelny. W kolejnym rozdziale porozmawiamy o zmianach w funkcjach. Poznasz tzw. arrow functions wraz z poradami, kiedy z nich korzystać, a także z konsekwencjami ich użycia. Zobaczysz również, jak korzystać z domyślnych parametrów. Następną nowością będą operatory rest i spread, które znacząco uproszczą pisanie kodu dla funkcji i tablic. Chwilę później rzucimy okiem na bardzo ciekawy temat, mianowicie na tzw. destructuring. To nowa funkcja języka, która pozwala w łatwy sposób wyciągnąć odpowiednie dane z tablic i obiektów, nawet jeżeli te posiadają kilkupoziomową, zagnieżdżoną strukturę. Zmian doczekały się również ciągi znaków. Poznasz nowy zapis, tzw. template string, a także możliwość wykorzystania funkcji tagujących.
ES6 wprowadza do języka JavaScript zapis klas. I choć na początku wydaje się, że to duży krok w stronę klasycznych obiektowych języków programowania, to jak się przekonasz, jest to w dużej mierze tzw. syntactic sugar, a więc zupełnie nowy, prostszy zapis, a prawie identyczne jak wcześniej działanie, oparte na dziedziczeniu prototypowym. W kursie poruszymy również temat Symboli oraz tego jak z nimi pracować, a chwilę później poznasz iteratory. To konstrukcje ułatwiające iterację, które znacząco upraszczają pracę z kolekcjami danych. Wraz z iteratorami poznasz również generatory, które ułatwiają z kolei tworzenie tych iteratorów. Istotną nowością w ES6 są również natywne Promise. To sposób na rozwiązanie problemu asynchroniczności, który znamy od bardzo dawna w postaci różnych bibliotek. Od teraz jednak Promisy znajdują się bezpośrednio w języku. Nowymi konstrukcjami, które pozwalają pracować z kolekcjami danych, są Map i Set. Dowiesz się jak z nich korzystać, a także do czego są przydatne. W jednym z rozdziałów rzucimy też okiem na tzw. Proxy API. To mechanizm języka, który pozwala na dość niskopoziomowy dostęp do różnych operacji. I choć być może nie jest to coś, z czego będziesz korzystał nad wyraz często, to warto wiedzieć, jakie są nowe możliwości tego API.
Jedną z najlepszych nowości, która zawitała do języka JavaScript wraz z ES6 są moduły. To możliwość dzielenia kodu na wiele plików, z których można pewne wartości wyeksportować, a następnie zaimportować je w innych modułach. Tutaj dowiesz się wszystkiego, co z modułami związane. Zobaczysz wiele sposobów na eksport i import, a także jak pracować z modułami w przeglądarkach internetowych. Kurs skupia się na omówieniu wszystkich najważniejszych nowości w ES6, dzieląc je na rozdziały. Jeden z nich natomiast, poświęcony został omówieniu mniejszych zmian, które znalazły się w specyfikacji. Poznasz w nim np. nowe metody tablic czy ulepszoną współpracę z Unicode.
Specyfikacja EcmaScript 2015 wprowadziła naprawdę bardzo wiele zmian, ale jej twórcy założyli, że od tego czasu każda kolejna wersja specyfikacji będzie pojawiać się co roku. Oznacza to przede wszystkim, że nie będziemy na raz bombardowani aż tak wieloma zmianami, jak w 2015 roku. W tym kursie nie zabrakło zatem omówienia nowości ze specyfikacji ES2016 oraz 2017, gdzie poznasz np. nowe metody dla stringów czy funkcje asynchroniczne.
Kiedy będziesz już uzbrojony w solidną wiedzę z zakresu nowości w ES6, dowiesz się jak w praktyce pracuje się dzisiaj z tym standardem. W jednym z rozdziałów omówimy nowoczesny workflow z użyciem npm i wykorzystamy popularne narzędzie webpack, do pracy z modułami, a także do transpilowania kodu ES6 do wersji ES5. Dzięki temu nowoczesny kod, który napiszemy, będzie mógł być uruchamiany również w starszych przeglądarkach, które nie wspierają najnowszego standardu. Dowiesz się na co zwrócić uwagę, by wszystko działało bez zarzutu.
Zwieńczeniem tego kursu będzie praktyczny projekt, w którym od podstaw wykonamy swoją własną bibliotekę do pracy z Obiektowym Modelem Dokumentu. Będzie ona w działaniu nieco podobna do znanej chyba wszystkim biblioteki jQuery. Na tym przykładzie postaramy się wykorzystać jak najwięcej wiedzy z zakresu ES6 zdobytej wcześniej. Stworzymy metody do pracy z drzewem dokumentu, a więc do wyszukiwania elementów, do tworzenia nowych, do przypisywania im klas, atrybutów czy styli CSS. Nie zabraknie również modułu odpowiedzialnego za współpracę z Ajax. Cały kod utworzymy oczywiście w sposób modułowy, aby bibliotekę można było łatwo rozwijać w przyszłości. Na koniec projekt ten przetranspilujemy do kodu ES5 z użyciem Babel i przetestujemy w starszej przeglądarce Internet Explorer 11, aby upewnić się, że nasza biblioteka działa poprawnie.
Kurs ten jest dla wszystkich osób, które znają już język JavaScript i czują się w pracy z nim swobodnie. Jeśli zatem chciałbyś pracować z nowoczesnym kodem JavaScript, to ten kurs jest zdecydowanie dla Ciebie. A może masz zamiar poznać framework Angular lub bibliotekę React? Tam również wykorzystywany jest najnowszy zapis ES6, więc wiedza ta będzie naprawdę pomocna. Z solidną wiedzą z zakresu EcmaScript 6, bez trudu pozostaniesz na bieżąco z każdą kolejną edycją tej specyfikacji.
W tej lekcji poznasz nową pętlę dostępną w EcmaScript 6 i jest
to pętla for of, a służy ona do iterowania po obiektach, które zawierają
w sobie iterator i takie obiekty z angielskiego nazywa się iterables. Jeżeli
mają sobie iterator, to taka jest ich nazwa. Dowiedziałeś się już jak tworzyć iteratory, ale
to jeszcze nie koniec naszej przygody z nimi, bo zobaczysz później, że to wszystko będzie znacznie
ułatwione. Ja natomiast pokazuje ci wszystko krok po kroku, abyś dobrze zrozumiał
koncepcję, a później będziesz mógł korzystać z prostszych zapisów, ale
będziesz miał już w głowie jak tak naprawdę to wszystko działa, więc teraz przyjrzymy się temu, jak
działa taka pętla. Mamy przykład z lekcji poprzedniej, gdzie do zwykłego obiektu dodaliśmy sobie
iterator i pokazałem ci jak przeliterować pętlą for,
taką zwykłą, po całym tym iteratorze. Teraz pokażę ci nowy zapis,
jest to pętla for of i ona znacząco będzie ułatwiona, więc tą pętle for sobie
wykomentujemy i napiszę for i ta pętla wygląda tak, że tworzymy
sobie zmienną na przykład value, ale tutaj to, co jest ważne piszemy of i podajemy
jakiś obiekt, który ma w sobie iterator, czyli w tym przypadku, musimy
sobie podać, zobaczmy, iterator,
okej i zrobimy console.log value. Zaraz
wrócę do tego, co dokładnie tutaj się dzieje, otwórzmy sobie konsole i jak widzisz pojawił
nam się błąd. Czyli nie muszę, tak jak wcześniej, wywoływać już tego wewnętrznego
iteratora, ale wspominałem ci już wcześniej, że interpreter JavaScript'u
będzie szukał po symbol kropka iterator takiej funkcji, dlatego to wykomentujemy
i teraz będziemy iterować bezpośrednio na tym obiekcie it, czyli wystarczy,
że jakiś obiekt dowolny będzie miał sobie symbol kropka iterator i będzie
to funkcja, która właśnie zwraca nam obiekt z metodą next, czyli musi się
zachowywać tak jak ci pokazałem, to wtedy ta pętla potrafi po tym przeiterować. Zobaczmy
czy teraz to zadziała i okazuje się, że tak. Wszystko działa poprawnie, natomiast
jest to tutaj jedna ciekawa rzecz. Zauważ, że pod zmienną value mam od razu wartość,
a tutaj wcześniej ten nasz iterator zwracał nam obiekt, taki jak tutaj, gdzie
mieliśmy done i value i dopiero po kropce musieliśmy się odwołać tutaj do o value.
Jak zatem widzisz, pętla for of robi to za nas, czyli od razu do
tej zmiennej przypisze nam to, co będzie w zwróconym obiekcie pod kropka value, a
kiedy ona zakończy iterację. Otóż wtedy, kiedy done będzie miało wartość true. Tutaj
sprawdzałem to ręcznie, natomiast pętla for of wie kiedy ma zakończyć, bo w tym zwróconym
obiekcie właśnie widzi, że done to jest true. No i wtedy wyskakujemy z
tej pętli i przechodzimy do wykonywania kodu, który jest poniżej. To co
jest ważne, ta pętla potrafi iterować po każdym obiekcie, który zawiera w sobie iterator, gdybyśmy
sobie tutaj chcieli zrobić string czy przeiterować po stringu, to mogę zrobić
pętle for of i napiszemy sobie let ch, jak character
of Piotr. String też
zawiera w sobie iterator, dlatego mogę wyświetlić console.log ch i zobaczymy
poszczególne literki wybrane właśnie z tego słowa, więc
jest to o tyle istotne tutaj, że wszystko co jest iteratorem może być
użyte na pętli for of i jeszcze to zobaczysz w tym kursie. Natomiast
na koniec chciałbym ci pokazać jeszcze jeden ciekawy przykład, który nie płynie bezpośrednio ze specyfikacji
EcmaScript 6, ale tym razem ze specyfikacji HTML. Chodzi o
to, że jeżeli na stronie i tutaj dołączyłem sobie takie elementy li, widzimy
je tutaj i jeżeli sobie tych elementów wyszukamy za pomocą takiego
zapisu. Może ja napiszę lis document querySelectorAll.
No i wyszukamy sobie tutaj tych elementów. One się znajdują tak naprawdę po wstawieniu
w tym miejscu w takim div'ie edu-content, z taką
klasą. Więc wyszukajmy to sobie. Mam nadzieję, że znasz taką metodę, ona
nie jest w JavaScripcie, tylko w obiektowym modelu dokumentu. Wyszukajmy wszystkich
elementów li i zobaczymy w przeglądarce czym jest właśnie ta zmienna
lis. Może to co mieliśmy wcześniej wykomentujemy, żeby nam tutaj było
to wszystko lepiej widoczne i ja sobie jeszcze odznacze tę opcje, żeby nam się komunikaty nie pojawiały
i zobaczymy co to jest lis. Wygląda tak jak tablica, ale tak naprawdę jeśli
byśmy napisali lis constructor, to zobaczymy, że jest to tak zwany notice,
czyli taka jest jakby klasa tego zwróconego obiektu i to co
jest ciekawe, to w w specyfikacja HTML5 dodała do tej klasy iterator,
dlatego można iterować po elementach notice, czyli takich zwróconych na
przykład z document query SelectorAll za pomocą pętli for of i teraz
będę chciał ci to pokazać tutaj. Normalnie musielibyśmy po nich iterować za pomocą
na przykład zwykłej pętli for, gdzie robiliśmy var i na przykład równa się 0
i jest mniejsze od lis length i tak
dalej. Natomiast od jakiegoś czasu również metoda z tablic jest tutaj na nich dostępna,
więc mógłbym napisać lis for each. No i tutaj skorzystać
z takiej metody, też jest dostępna, aczkolwiek inne metody tablic, jak map nie
są dostępne, ale zobacz o ile to można uprościć, od kiedy wiemy, że taki
obiekt NodeList zawiera w sobie iterator. Możemy napisać for
i tutaj napiszemy sobie let, powiedzmy li of
lis i tyle wystarczy i za każdą iteracją pod li będę miał
jeden wybrany obiekt i to co jest też fajne z użyciem let, pamiętasz, tutaj
poniżej to li nie będzie już dostępne, więc naprawdę można tutaj nie oplatać z tego
żadną funkcją, a bardzo wygodnie pracować i tworzyć sobie na przykład lokalne zmienne,
dlatego odwołam się do każdego li, następnie do style. To jest
z obiektowego modelu dokumentu możliwość przypisywania styli i napiszemy sobie
kolor, będę chciał go ustawić na wartość red, czyli na czerwony kolor. Zobaczmy. Po
odświeżeniu tej strony wszystkie li powinny mieć czerwony kolor. Tak
się nie stało, więc tutaj prawdopodobnie jakiś błąd nam się pojawił. Zobaczmy
czy poprawnie wyszukałem tych wszystkich elementów. Wydaje się, że tak Zresztą przed
momentem widzieliśmy je w konsoli. Ale jak tutaj widzę błędem
jest to, że nie podałem poprawnego koloru, zabrakło jednego zera. Teraz po odświeżeniu każdy z tych
elementów otrzymał to co można sprawdzić tutaj, kolor. Przeglądarka zamieniła go na
notacji RGB, ale nie ma to żadnego znaczenia. Jak zatem widzisz pętla for
of jest bardzo wygodna i pozwala nam iterować na wszystkich obiektach,
które zawierają sobie iterator i jako ciekawostka wiesz już, że nawet niektóre wbudowane
typy w obiektowym modelu dokumentu, takie jak NodeList, zawierają w sobie iterator.
Dzięki czemu możemy bardzo wygodny sposób po nich iterować.