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.
Cały czas pozostajemy jeszcze w tematyce destructuring'u. Natomiast teraz będę
chciał ci pokazać, jak znany ci już operator rest wykorzystać w przypadku
dekompozycji tablic oraz jak możemy korzystać domyślnych
wartości, więc przejdźmy sobie od razu do kodu i utworzę sobie taką tablice, w
której mamy liczby i będziemy chcieli kilka z nich sobie wyciągnąć do zmiennych.
Powiedzmy, że chciałbym utworzyć zmienną, która się nazywała first,
second i one będą miały tutaj 10 oraz 20,
więc napiszemy numbers i tutaj napiszę również, że gdyby numbers to nie była tablica,
to podaję taki tutaj parametr. Oczywiście ten operator nie
sprawdzi czy jest to tablica, po prostu gdyby to była wartość fałszywa, na przykład null czy undefined.
Warto sobie go zawsze podać. No i wiemy teraz, że pod tymi wartościami first
i second mamy
te wartości oczywiście można to sprawdzić. Natomiast teraz skorzystamy sobie z operatora
rest, które pozwoli w formie tablicy zebrać nam pozostałe wartości. Pamiętasz
jak na funkcjach z niego staliśmy, przy parametrach funkcji. Mogłem powiedzieć, że
pierwszy nazywał się type, a wszystkie pozostałe mają być pod zmienną
o nazwie args. Być może pamiętasz. Jeżeli nie, to wrócę do tej lekcji
i ona była tablica, więc tutaj również mogę skorzystać z operatora
rest pisząc trzy kropki i nazwę zmiennej, którą chcę utworzyć nazwijmy
ją po prostu rest, aczkolwiek jest to dowolne i to oznacza, że first
ma mieć wartość 10, second wartość 20, a pod rest mają
być wszystkie pozostałe rzeczy z tej tablicy. Zebrane również w formie tablicy,
więc jeżeli bym tutaj napisał sobie raz bo to będzie nazwa naszej zmiennej
to zobaczymy, że mamy tutaj na początku 10, 20, a później tablice
w której jest wszystko, co było dalej, czyli wszystkie pozostałe wartości. Gdybyśmy
jedną chcieli pominąć, to znowu tutaj postawiony przecinek, czyli 30 w tym momencie
jest ignorowane, a 40 i 50 będzie zapisane pod
tablicą rest. Pamiętaj jednak, że ten operator zawsze zwraca tablice,
czyli pod zmienną, którą nazwałem sobie rest mam normalną tablice
zawierającą w tym przypadku 40 oraz 50. Tutaj również
ważne jest to, że po tym operatorze nie możemy sobie podać jakieś innej
zmiennej, którą chcielibyśmy nazwać, bo to również wygeneruje błąd. Rest
musi być tak jak w przypadku funkcji zawsze na końcu. Teraz utwórzmy
sobie jeszcze troszeczkę inną tablicę, bo będę chciał ci pokazać jak pracować z domyślnymi wartościami.
Napiszmy znowu numbers i będzie to tablica, która ma wyłącznie dziesiątkę
i teraz chciałbym sobie utworzyć zmienną first i zmienną
second i przypiszę tutaj tablica numbers i żeby
zawsze pamiętać przypiszmy jakiś pusty, również obiekt, pustą tablicę. No
i sprawmy sobie, co będzie pod first i co będzie pod second. Domyślasz się pewnie, że pod
second jest udefined. Natomiast co gdybym chciał zdefiniować domyślną wartość,
jeżeli tutaj będzie undefined. Okazuje się, że podobnie jak w przypadku wartości
domyślnych w funkcjach, tutaj można od razu napisać sobie równa się na przykład
2 i to oznacza, że jeżeli w tej tablicy nie będzie niczego pod
drugim indeksem, bo tutaj mamy 01, czyli jeden to jest drugi indeks, druga
wartość. No to wtedy będzie domyślnie 2. Zauważ, że tak też się stało. Natomiast
pytanie czy chodzi tutaj tylko o undefined, czy o wszystkie wartości
fałszywe. Gdyby tutaj podstawił zero, zero jest wartością fałszywą to
czy będzie tutaj domyślny parametr domyślna wartość czy nie, okazuje
się, że nie, czyli tutaj chodzi wyłącznie o przypadek, kiedy tam w środku będzie undefined.
Nawet gdyby tutaj było null to null zostanie mi normalnie zwrócone,
więc wyłącznie jeżeli tutaj byłoby wpisane undefined albo jeżeli po prostu
w tej tablicy nic takiego nie ma, gdybym wpisał undefined, upewnijmy
się również, domyślny parametr czyli dwójka został wzięty pod uwagę. W ten zatem
sposób możesz przypisywać do dowolnych zmiennych, które tutaj tworzysz, od razu domyślny
parametr i tutaj również mamy zjawisko lazy evaluation, o którym ci już mówiłem, w
przypadku funkcji. Gdybyśmy tutaj wywoływali jakąś funkcję, na przykład getValue,
to ona się wywoła wyłącznie wtedy, jeżeli rzeczywiście
będzie taka potrzeba, czyli drugi element w tablicy nie będzie podany. Zostawmy
sobie to jednak z dwójką i teraz pokażę ci jak korzystać z domyślnych wartości przypadku
destructuring'u obiektów. Wkleję sobie tutaj obiekt, taki
jak już widzieliśmy. Ten
console.log może wykomentujemy i będę chciał zrobić prosty destructuring, czyli let
i tutaj napiszemy sobie firstName, lastName
i chciałbym wyciągnąć sobie jeszcze może job, w ten
sposób i przypiszemy do tego person i warto pamiętać, znowu o domyślne
wartości. No i teraz oczywiście zrobimy console.log firstName,
lastName i job. No i nie powinno tutaj być żadnych niespodzianek. Jest
to księgowy, ale napiszmy, że domyślną wartością i to robimy w tym przypadku, w
ten sposób. Jest programista. Ona nie
będzie znowu wzięta pod uwagę, zauważ, ale gdyby tutaj nie było księgowego, to
wtedy programista będzie domyślną wartością. No i teraz jeszcze, żeby
ci pokazać wizualnie jak to inaczej mogłoby wyglądać, gdybym chciał nazwać
swoją zmienną nie job, tylko na przykład position to
pamiętasz, że robiliśmy to w ten sposób i gdybym chciał jej przypisać
domyślną wartość, wyglądałoby to dokładnie tak. Czyli teraz tutaj będziemy mieli zmienną position,
zobaczmy, jest to programista, czyli pokazałem ci tak naprawdę już wszystko
jak to może wizualnie wyglądać. W poprzedniej lekcji widziałeś zagnieżdżone struktury,
a tutaj widzisz dodatkowo jeszcze, jak wyglądają wartości domyślne. No
i tak by to wyglądało, jeżeli byśmy chcieli mieć nazwy zmiennej inną,
niż nazwa właściwości i dodatkowo jeszcze domyślną wartość.