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 przyjrzymy się nowością, jeżeli chodzi o tablicach. W EcmaScript
6 mamy kilka nowych metod, o których warto pamiętać, z których warto korzystać. Dlatego
teraz sobie na nie zerknijmy. Mamy pusty skrypt i zaczniemy od metody, która
nazywa się array of, żeby ci jednak zobrazować jak ta metoda działa
to skorzystamy najpierw z EcmaScript 5, więc napiszmy sobie na przykład var arr1
i co by było gdybyśmy otworzyli tablice w ten sposób, czyli gdybym podał 10,
zobaczmy, okaże się, że będziemy pod arr1
mieć tablice, która ma 10 razy undefined. Jest to zachowanie tablic, właśnie takie,
jeżeli korzystamy z konstruktora, że jeżeli podamy tylko jedną liczbę, to jest tworzona
nowa tablica o długości 10 i ma 10 wartości undefined. Gdybym podał
drugą wartość, to już nie byłoby tego problemu, mielibyśmy array, w którym
mielibyśmy dwa elementy. Natomiast właśnie to zachowanie zostało zmienione
w EcmaScript 6, ale żeby to było wstecz kompatybilne, to przy takim zapisie
nadal działa to tak samo, ale gdybyśmy sobie utworzyli tablice za pomocą nowej
metody statycznej, która jest na array dostępna, czyli array of 10,
to wtedy zostanie utworzona tablica z jednym elementem i będzie to 10. Zobaczmy
arr2 i jak widzisz mamy tutaj 10, więc jeżeli chcesz utworzyć tablice
z jednym elementem, za pomocą takiego zapisu możesz to zrobić, oczywiście
nie ma powodu, aby to robić jeżeli możesz skorzystać z takiego oto zapisu. Oczywiście
też to będzie działać. Dla referencji później może tutaj zróbmy sobie
console.log, zarówno jednej tablicy jaki drugiej i przejdziemy do kolejnej
metody która nazywa się array from. Bardzo przydatna metoda tym razem, dlatego
że pozwoli nam zamienić obiekty tak zwane tablicopodobne na prawdziwą tablicę
i teraz co jest obiektem tablicopodobnym. Otóż coś, co nie
jest utworzone z array, ale posiada numeryczne indeksy od zera, a także
właściwość length. Na przykład zmienna arguments jest takim obiektem tablicopodobnym,
więc chciałbym sobie teraz utworzyć zmienną, którą nazwiemy lis
i chciałbym zrobić coś takiego, że wyszukamy sobie wszystkich elementów na stronie, które mamy. Elementów
li, które tutaj się znajdują i to nam zwróci tak zwany node list i to też
nie jest tablica. Pokazałem ci wcześniej już tym kursie, że specyfikacja html
dodała na przykład metodę for each, czy iterator do node list, ale
wciąż nie jest to tablica i gdybyśmy chcieli utworzyć tablice, tak naprawdę z wszystkimi znalezionymi
elementami, to możemy to zrobić. Napiszmy array from, tak nazywa
się ta metoda i tutaj wpiszemy sobie document query selector all.
To jest metoda obiektowego dokumentu, która zwróci nam
wszystkie elementy w formie tak zwanego Node list, więc wyszukamy
sobie edu-content ul li, czyli to jest
obiekt tablicopodobny, który zostaje zwrócone z takiego zapisu. Wrzucamy to do array
from i tak naprawdę będziemy mieć prawdziwą tablice. Zobaczmy,
mamy tutaj tablice i gdybym na tej zmiennej lis chciał skorzystać na
przykład z metody filter, jak najbardziej, wszystko działałoby poprawnie. Podobnie
możesz do array from wrzucić sobie na przykład zmienną arguments. Kolejna
metoda to array fill, więc tworzę sobie tablice na szybko numbers i
chciałem tutaj mieć 1, 2, 3, 4 i 5. Teraz
mamy taką oto metodę, numbers fill, czyli metoda nazywa
się fill i mogę powiedzieć wypełnij całą tablicę na przykład jedynkami i zróbmy console.log
numbers. To nie zwraca nowej tablicy, ale modyfikuje tablice, na której zostało
użyte, więc zobaczmy. Będziemy mieć same jedynki. Jeżeli to dla ciebie byłoby
przydatne, to warto wiedzieć, że taka metoda istnieje, ale co jest ciekawe, ona przyjmuje
jeszcze dwa parametry, mogę powiedzieć wypełnij mi jedynkami, ale zacznij
od indeksu 1, czyli pomiń mi ten element albo może dwa, czyli 0, 1, 2.
Zacznij od inndeksu 2. Zobaczmy. Dwa pierwsze mi zostawił, resztę
uzupełnił, ale mogę jeszcze podać trzeci parametry, do którego indeksu ma uzupełniać,
czyli 0, 1, 2, 3 i 4. Zróbmy sobie,
że do indeksu 4 i wtedy ostatniego elementu nam nie zmieni, bo to
jest do indeksu, nie wliczając tego ostatniego indeksu. Kolejna
metoda to jest metoda find i ja sobie do niej skopiuję tablice. Będziemy
w tej tablicy mieli kilka imion i metoda find polega na tym, że
napiszmy sobie może tutaj zmienną woman i będę
chciał znaleźć pierwszy element, który kończy się na a. Założymy, że
jeżeli się kończy na a, to jest to żeńskie imię. Nie zawsze to będzie prawdą ale możemy
tak zrobić więc napiszę names find i tutaj możemy podać funkcję
właśnie z której będziemy wracać true or false jeżeli zwrócimy true
to ten element zostanie zwrócony nam do zmiennej i iteracja się zakończy
więc tutaj możemy skorzystać z funkcji arrow i napiszmy sobie value
to będzie taki pojedynczy element Piotr czy Anna i stąd chcemy zwrócić czy
element kończy się na a więc wykonajmy sobie tutaj metodę którą powinieneś
już znać też z EcmaScript 6 czyli value ends with na stringach
jest dostępna jeżeli kończy się na a to zostanie zwrócone true
i zobaczmy teraz console.log woman mamy Anna
czyli jest to fajna metoda która pozwala nam na podstawie jakiegoś warunku znaleźć
jakiś element i go zwrócić bardzo podobną do tej metody jest
metoda która się nazywa find index i napiszmy sobie woman index
zauważ że ona będzie działać tak samo tylko że nazywa się find index
i z kolei zobaczymy co ona zwróci zamiast zwrócić
nam konkretny element to zwróci nam indeks tego elementu czyli ona
jest podobna do index of tylko że jeżeli index of bym podał to muszę
podać konkretny element na przykład Anna tutaj natomiast widzisz że
mogę podać funkcję w której mogę mieć jakiś swój własny kod i jakiś własny warunek
i ostatnio metodą którą chciałbym ci pokazać jest copy within zróbmy
sobie consol log names które mieliśmy i teraz odwołamy się do names copy within
i jest to metoda która modyfikuje tablicę na której została wykonana jako
pierwszy parametr podajemy indeks elementu pod który chcemy wstawić
inne elementy czyli chcę wewnątrz tej tablicy skopiować na przykład Anna i Jan
pod ten indeks czyli Piotra zastąpimy dlatego podałem zero czyli od zera
zaczniemy jakby wstawiania i chciałbym teraz skopiować od indeksu 1 czyli
Anna do indeksu 3 nie wliczając tej trójki czyli
chcę Anna i Jan więc podamy sobie tutaj 3 i zróbmy sobie
console log names okej tutaj pojawił się
błąd źle wpisałem nazwę w zasadzie tutaj mamy literówkę przy
names okej zobaczmy i oryginalna
tablica wyglądała tak ale powiedziałem od indeksu zero zacznij mi stawiać i skopiuj
1 do 3 tak naprawdę tak tak podaliśmy czyli do 3
a więc skopiuj 1 2 te dwa
elementy wstawie tutaj trzeci element został na swoim miejscu i czwarty również
więc jeżeli wewnątrz tablicy będziesz chciał coś skopiować pamiętaj że metoda copy within
istnieje i tak naprawdę to wszystko jeżeli chodzi o nowości w
tablicach pamiętaj tylko tyle to co najważniejsze według mnie że
tablica od tej pory są iteratorami czyli zawierają w sobie iterator dzięki
czemu możesz też co juz robiliśmy wielokrotnie wykorzystywać pętle for of