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 wracamy jeszcze na chwilę do domyślnych parametrów i zobaczymy jak ona się zachowują
przy współpracy ze zmienną arguments. Stworzyłem taką prostą funkcję, która
nazywa się multiplyBy i przyjmuje jeden parametr. Jeżeli
nie pogramy drugiego, to drugi ma taką samą wartość jak pierwszy. Wiesz już jak to zrobić. Natomiast, jeżeli
go podamy to oczywiście będzie miał on swoją indywidualną wartość. No i po prostu zwracamy
sobie coś takiego. Teraz pytanie brzmi, jaką wartość
będzie miało arguments length. Arguments,
jest to taka pseudo tablica, która nam pokazuje ile zostało
argumentów przekazanych przy wywołaniu funkcji, czyli w momencie
kiedy ją wywołuje multiplayBy. Jeżeli
tutaj przekażę jeden, drugi, trzeci. No to powinno mi zwrócić trzy.
Zobaczymy. Teraz zobaczyliśmy undefined. Z tego powodu,
że tutaj popełniłem błąd. Tak to powinno wyglądać, spróbujmy
jeszcze raz taką funkcję wywołać i mam trzy. Tutaj pod spodem jest wynik działania
tej funkcji. Czyli generalnie zawsze tyle, ile przekażemy parametrów tyle nam zwróci
length. Możemy w ten sposób sprawdzić ile jest parametrów. Teraz pytanie brzmi. Jeżeli
wywołąmy sobie tą funkcję wyłącznie z jednym parametrem, z jednym argumentem, to
drugi parametr jest wtedy domyślny, czyli tutaj powinno też dwa zostać podstawione
i teoretycznie arguments length powinno zwrócić dwa. Sprawdźmy czy tak
się stanie. Okazuje się, że nie. Mamy zwrócone jeden, czyli
zmienna arguments zawsze się będzie zachować tak samo jak wcześniej byśmy tego oczekiwali,
czyli ile przekażemy przy wywołaniu. No to tyle po prostu będzie tych
parametrów pod zmienną arguments. No
i tyle zwróci nam też length. Natomiast gdybyśmy się odwołali bezpośrednio do funkcji
i length to z kolei taki zapis pozwala nam określić ile
funkcja wymaga parametrów, czyli tutaj są one dwa i zobaczymy jak to
wygląda. Też pokazuje nam, że jest to jeden, a gdybyśmy nie mieli tutaj domyślnego
parametru, to powinno nam pokazać dwa, czyli
domyślny parametr jakby w tym przypadku też jest ignorowany. Tak jak
gdyby nie był on wymagany i teraz jeszcze jedną istotną rzeczą jest fakt. Na
chwilkę sobie może usuńmy ten zapis, że w EcmaScript 5
gdybyśmy się odwołali do arguments, jest to taka pseudo tablica i na przykład jeden,
to wtedy odwołamy się do tego drugiego argumentu, który został przekazany. Gdybym
zmienił jego wartość na przykład na 10, to zobaczmy jaki będzie wynik tutaj
tego mnożenia. Wywołam sobie sobie funkcję multiplyBy i podam
dwa razy trzy, ale w tej funkcji tą trójkę nadpisuje na
10, więc mam wynik mnożenia 20. Natomiast, jeżeli byśmy korzystali
ze strict mode cały, czas jesteśmy powiedzmy
w EcmaScript 5, to wtedy zobacz, nie
powinniśmy mieć tutaj 20. Okej, czyli nie powinno nam to zadziałać, ale z jakiegoś powodu zadziałało. To
string musimy dać na samej górze funkcji, wtedy będzie wszystko okej, okej. No
i zauważ, że teraz jest dwójka, czyli innymi słowy jeżeli jesteśmy w tak zwanym strict mode,
to wtedy zmiana w pseudo tablicy arguments, to prawda zmieni
tą wartość, ale nie zostanie to odzwierciedlone w tym argumencie,
który jest jakby w tym miejscu. Mam nadzieję, że to jest jasne, więc jeżeli byśmy zrobili console.log
arguments. Tam będzie wartość 10, ale nie wpłynęło to na lokalną zmienną n.
Bez użycia strict mode wpłynęło i teraz po co o tym mówię. Otóż,
jeżeli korzystamy z domyślnych parametrów, czyli wystarczy, że JavaScript zobaczy,
że tutaj mamy taki zapis, to on już wie, że korzystamy z EcmaScript 6 i
wtedy tutaj ciało tej funkcji zachowuje się dokładnie tak samo jak przed momentem
pokazałem w trybie strict mode. Czyli jeżeli sobie bym zmienił z jakiegokolwiek powodu tutaj
wartość parametru, w ten sposób, to nie zostanie to odzwierciedlone na
zmiennej n w tym przypadku, bo do niej on by się odwoływał. Zobaczmy,
spróbuję ją wywołać i jak widzisz wyniki są poprawne. Warto
o tym wiedzieć, chociaż nie często coś takiego przypisujemy aby zmienić,
no ale wiesz już w tym momencie jak to działa. Zapamiętaj z tej lekcji,
że jeżeli odwołamy się do nazwa funkcji kropka length, a to powinno nam pokazać,
ile funkcja oczekuję parametrów, to nie pokaże nam tych, które mają wartości domyślne,
a jeżeli już wywołane funkcje i sprawdzimy jaka jest długość
tablicy arguments, ale podamy tylko jeden parametr, to zostanie
zwrócone jeden, bo ten domyślny nie będzie brany pod uwagę.