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 tym rozdziale pokażę ci w jaki sposób działa tak zwane Reflect API, dostępne
w ES6. Natomiast zanim do tego przejdziemy, to chciałbym ci przypomnieć, jeżeli jeszcze o
tym nie wiedziałeś, to cię poinformować, że coś takiego jest. Mianowicie czym
są gettery i settery w EcmaScript 5 dlatego, że to co ci pokażę
w lekcji kolejnej jest swego rodzaju kontynuacją tego co mieliśmy od ES5. Mamy
sobie taki oto obiekt i w środku zapisałem firstName i lastName i zauważ,
że stworzyłem dwie zwyczajne metody. Nie ma tutaj nic skomplikowanego getFullName
i setFullName, czyli getFullName będzie nam zwracać firstName i lastName
rozdzielone na spacji, więc wpiszmy sobie tutaj person getFullName. Widzimy,
że jest to Jan Kowalski, natomiast setFullName pozwoli nam podać całe nazwisko,
rozbijemy go sobie na spacji i ustawimy firstName i lastName w taki oto sposób,
więc jeżeli bym teraz napisał person setFullName,
to musiałbym tutaj podać na przykład Jan Nowak. Zostanie
to rozbite na spacji i ustawione i teraz getFullName zwróci mi Jan Nowak. Oczywiście
w każdej chwili mogę też się odwołać do tych poszczególnych właściwości. Natomiast
mamy w ES5 coś takiego, co nazywa się getter'em lub setter'em i
teraz chciałbym tak je tutaj dodać. Więc to sobie będę chciał
wykomentować, może skopiuję tylko to, co jest wewnątrz i jeżeli wcześniej nie widziałeś setter'ów,
to może to dziwnie wyglądać. Natomiast w dowolnym takim obiekcie możemy napisać get
lub set, do czego za moment przejdziemy getFullName.
Nie chcę, żeby to się nazywało getFullName, tylko samo fullName, a kiedyget jest to
specjalne słowo i tutaj nie przypisujemy wtedy funkcji w ten sposób, tylko w
taki sposób podobny jak w ES6, czyli taki skrócony, ale to było dostępne
już w EcmaScript 5 i będę chciał zwrócić firstName i lastName i
teraz co to oznacza. Czy to znaczy, że będę miał metodę fullName, sprawdźmy, person fullName. Okaże
się, że to generuje błąd. Gettery działają tak, że chociaż utworzyliśmy
sobie funkcję, to ona jest wywoływana za każdym razem gdy ktoś próbuje
odwołać się do właściwości o nazwie fullName. Czyli jeżeli ktoś napisze person
fullName, normalnie jak właściwość, to zostanie wywołana nasza
funkcja getter'a, czyli widzisz, że jest to funkcja, bo mogę tutaj zrobić co chcę i coś
zwrócić, ale używa się jej jak właściwości, czyli dla kogoś wygląda
to jak zwykły właściwość obiektu i teraz mamy jeszcze setter'y. Setter się
wykona wtedy, kiedy ktoś napisze fullName i będzie chciał przypisać nową
wartość. Na przykład Jan Kowalski. Zobaczmy czy to się uda. Zróbmy
teraz fullName. Jak widzisz nie wiemy czy się udało, bo przypisałem
taką samą wartość. Przypiszmy sobie Jan Nowak, okej.
I teraz pobierzmy sobie full name, mamy Jan Kowalski, czyli nic się nie wydarzyło. Nie
udało się tego nadpisać, więc utwórzmy sobie teraz setter. Robimy
to za pomocą słowa set i nazwa będzie taka sama. Natomiast tutaj
otrzymamy to, co ktoś przypisze, czyli w momencie kiedy ktoś napisze fullName równa
się Jan Nowak. To to co jest w tym miejscu otrzymamy pod parametrem tutaj, więc napiszmy,
że jest to fullName i będziemy
chcieli zrobić to samo co mieliśmy tutaj, czyli rozbić to sobie na spacji i ustawić
i teraz utworzyliśmy sobie setter, więc jeżeli ktoś by chciał napisać
fullName Jan Nowak, a później go pobrać, to widzimy, że ono
rzeczywiście zostało zmienione. Tylko teraz jaki jest minus tych getterów
i setterów względem tego co zobaczysz w lekcji kolejnej. Mianowicie nie możemy
jakby dynamicznie sobie sprawdzić co ktoś napisał. Czyli
ja musiałem z góry powiedzieć, że jeżeli ktoś napisze kropka fullName jako właściwość. Wykonaj
tę funkcję. Jeżeli napisze kropka fullName równa się i przybliżoną wartość,
wykonaj tę funkcję, ale nie mogę zrobić czegoś takiego, że jeżeli ktoś napisze
person i na przykład age równa się 20, to żebym ja mógł
to przechwycić, czyli chciałbym mieć taką możliwość, że jeżeli ktoś napisze person kropka
cokolwiek, to chciałbym to cokolwiek móc sobie jakoś sprawdzić i tego
w ES5 zrobić nie mogliśmy, ale będziemy mogli to zrobić w EcmaScript 6 za
pomocą tak zwanego Proxy API i o tym powiemy sobie w lekcji kolejnej.