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.
Kolejną konstrukcją, która doczekała się ciekawych zmian w EcmaScript 6
są stringi, czyli ciągi znaków. W tej lekcji pokażę ci
jak w inny sposób możemy z nim pracować i jakie one teraz oferują nam
zalety, a to o czym będziemy mówić z angielskiego nie zostało nazwane template
strings, więc przejdźmy sobie od razu do kodu i mamy tutaj coś, co już znasz,
czyli obiekt z którego robię destructuring, a więc wyciągam sobie trzy zmienne
firstName, lastName oraz age i teraz chciałbym je móc wyświetlić w
sformatowanym string'u, więc wkleję taki oto string i myślę,
że tutaj nie ma nic czego byś nie znał. Natomiast wcale wizualnie nie jest to zbyt przyjemne
do oglądania i często przy takich string'ach tworzą nam się błędy, że gdzieś nie postawimy
spacji czy jakiegoś innego znaku. Generalnie tworzymy tutaj nowy string
za pomocą operatora plus konkatenując wartości. Jeżeli
zrobimy coś takiego i zrobimy console.log info, no
to pewnie bez niespodzianek zobaczymy taki oto ciąg znaków. Czyli wszystkie
te nasze zmienne zostały tutaj podstawione, ale tak jak wspominałem, zresztą sam
widzisz, nie jest to zbyt przyjemne do oglądania i trudno się z tym pracuje
jeżeli string będzie chociaż trochę bardziej zaawansowany. Teraz tą
zmianą będę chciał wykomentować i pokażę ci jakie mamy nowe
rodzaje stringów w EcmaScript6. W zasadzie jeden nowy rodzaj. On
zachowuje się inaczej, ale też jest zwykłym string'iem. Napiszmy let info i teraz
zamiast cudzysłowów lub apostrofów, które w JavaScripcie działają
dokładnie tak samo, mamy nowy zapis string'u i są to takie backtick'i. Jeżeli
zrobisz coś takiego i wpisałbym tutaj Piotr, jest to dokładnie taki sam string,
jak utworzony za pomocą takiego wyrażenia, więc gdybym nie
porównał, dokładnie ten sam string, będzie miał dokładnie takie same metody jakie ma
string, czyli na przykład metoda split i tak dalej. Niczym to się nie
różni oprócz tego, że w tym string'u możemy robić pewne rzeczy, których nie
da się robić w string'ach utworzonych za pomocą cudzysłowów lub apostrofów. Tutaj
mamy te backtick'i, więc pokażę ci, co możemy zrobić. Napiszmy sobie to, co jest
wyżej, czyli imię i co ciekawe mógłbym tutaj oczywiście zrobić
tak samo jak wyżej, czyli plus firstName, ale nie muszę tego robić. Jeżeli
korzystamy z takiego nowego w string'u, to możemy interpolować wyrażenia
i co to znaczy. Otóż mogę postawić dolar i zrobić coś takiego
i to, co wpiszę w środku może to być dowolne wyrażenie JavaScript'owe, na przykład dwa
plus dwa lub wywołania jakiś funkcji i to co nam zwróci byłoby tutaj
wzięte pod uwagę. To zostanie podstawione, więc w tym przypadku imię cztery
powinniśmy zobaczyć. Tak też się stało, natomiast my tutaj podstawimy sobie
zmienną, którą wyciągnęliśmy z obiektu person, czyli widzisz, że łączy nam się to
wszystko fajną całość, ten destructuring teraz z tymi string'ami i napiszemy
firstName. Zobacz, zostanie to tutaj podstawione, czyli imię Jan.
Nie muszę niczego wydawać za pomocą plusa, więc jeżeli tutaj chciałem postawić
przecinek i spację to stawiam przecinek i spację I teraz piszę sobie nazwisko,
dwukropek spacja, tak jak widziałeś w tym miejscu i zamiast plusa wpiszę
sobie lastName. No i podobnie zrobimy z resztą, czyli postawię przecinek,
spację, wiek, spacja. Tutaj napiszę age i
na końcu postawię sobie jeszcze spację, lat, kropka. Zobacz
o ile lepiej to wygląda i szczególnie jeżeli twój edytor wspiera składnie ES6,
podświetla mi to w taki sposób, że dokładnie widzę, którym miejscu to wszystko jest. Tutaj
teoretycznie też jest to podświetlone, ale ten string nie dość, że tutaj jest dłuższy, tak
naprawdę w zapisie, to jeszcze jest mniej czytelny. Zobaczmy, efekt jest dokładnie
taki sam jak wyżej, czyli że nie mogłem sobie podstawić wartości tych wszystkich zmiennych. Gdybyś
z jakiegoś powodu chciał skorzystać z dolara, to jest też taka ciekawostka, czyli dosłownie
chciałbyś pisać coś takiego. To możesz tutaj przed dolarem postawić taki escape,
czyli taki znak i wtedy to nie zostanie w żaden sposób interpolowane,
więc warto o tym wiedzieć, natomiast w tym przypadku dla mnie nie będzie to przydatne.
Zostawimy to w takiej formie. Jak zatem widzisz jedną z
zalet takiego string'u, stworzonego za pomocą backtick'u, jest
to, że możemy interpolować wartości i pamiętaj, że tutaj dowolne wyrażenie JavaScript'owe może
być, mogłoby być takie. Jeżeli jakaś wartość jest prawdziwa, to zwróć
jedną rzecz, na przykład taki string Piotr. W przeciwnym wypadku, czyli
dwukropek zwróć Jan i zauważ, że nie ma żadnego błędu, będzie podstawiony Piotr,
więc to warto zapamiętać, że dowolne wyrażenie, a że taka zmienna
czy jej podstawienie też jest wyrażeniem, nie ma żadnego problemu. Natomiast teraz pokażę
ci jeszcze jedną nowość w tych string'ach. Otóż możemy tworzyć string'i rozciągnięte
na wiele linii, co wcześniej było niesłychanie kłopotliwe i tak naprawdę nie
było domyślnie wspierane przez język JavaScript. Wyobraź
sobie, że chciałbym utworzyć sobie taką zmienną template, w której
przechowywałbym string, który będzie rozciągnięty na wiele linii. Jeżeli tutaj podstawie
enter, od razu na czerwono mi edytor podświetla, a przeglądarka mi powie, że jest to błąd.
Nie możemy złamać string'u w nowej linii, więc żeby to zrobić, jeżeli
bym postawił enter, to muszę przed tym enterem postawić taki znak escape,
bo tak naprawdę tutaj gdzie postawiłem enter, jest niewidoczny znak nowego wiersza. Jeżeli
przed nim zrobię escape, to nie będę miał błędu, mogę zrobić to w ten sposób, więc
teraz wyobraź sobie, że chciałbym utworzyć sobie taką oto templatkę, gdzie
miałbym jakiś kod html, na przykład button class i powiedzmy, że
tutaj miałbym btn i teraz znowu chciałbym
podstawić nowy wiersz, więc znowu będę tutaj musiał zrobić escape. Teraz
tutaj pod spodem chcę zrobić tabulator, z tym akurat nie ma problemu i powiedzmy
wstawić jakiś span. Zamkniemy sobie ten span. Znowu
chciałbym postawić enter, więc znowu tutaj muszę zrobić coś takiego i w
tym miejscu chciałbym zakończyć button. Chodziło o to, żeby to było fajnie sformatowane, żebym
mógł to zobaczyć w taki sposób. Natomiast powiedzmy, że utworze wcześniej sobie zmienną
buttonText i tutaj będzie Wciśnij mnie. Chciałbym
to podstawić do tego span'a, więc znowu tutaj musiałbym zakończyć string, dodać
sobie buttonText, czyli z konkatenować i rozpocząć nowy string,
w ten sposób. Jeżeli template wyświetlę w konsoli,
no to będziemy mieli coś takiego, czyli zauważ, że wszystko to, co zrobiłem,
czyli takie ładne formatowanie, ono do końca nie jest zachowywane, co zresztą widać, bo
wszystko to jest w jednej linijce, ale pozwoliło mi to na złamanie tego string'u.
Widzę, że jeszcze tylko tutaj mam błąd przy tej klasie, więc możemy to poprawić. Okej,
zobaczymy, a teraz pokażę ci jak można to samo zrobić za pomocą nowego
zapisu, właśnie z użyciem template string'u, czyli takich backtick'ów. Będzie
to dużo, dużo prostsze. Utworze zmienną template. Na razie
nie możemy dwóch takich samych utworzyć, więc tamtą za moment sobie wykomentujemy
i tutaj bez problemu mogę tworzyć sobie nowe wiersze, więc wpiszmy
sobie dokładnie to samo, co mieliśmy wyżej, czyli button
z klasą btn. W środku chciałbym mieć span i zauważ, że
tutaj interpolacje wykonam sobie w taki prostrzy sposób, buttonText, czyli to
co już wyżej widziałeś. Zakończę span'a i zakończę button. Zobacz
o ile to jest lepszy zapis niż ten u góry. Więc ten u góry wykomentuje i teraz
jeżeli sobie odświeżymy to zauważ, że przy okazji tutaj w tym string'u zachowywane
są wszystkie nowe znaki nowego wiersza czy nowej linii. W tym
przypadku nie ma to dla mnie znaczenia, bo taki przycisk ustawił bym na stronę w formie kodu HTML, więc czy
to jest w jednej linijce czy nie, ma znaczenia, ale warto wiedzieć, że każdy tutaj postawiony
enter czy wciśnięty tabulator, tworzy nam tak naprawdę niewidoczny znak, który
tutaj w tym string'u później jest widoczny, czyli formatowanie zostaje zachowane. Jak
zatem widzisz, na takich template string'ach po pierwsze możemy interpolować wartości
które tutaj przez wyrażenie są zwracane, a po drugie z łatwością możemy tworzyć wielolinijkowe
string'i, które pozwalają ładnie sformatować, na przykład jakiś kod HTML.