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.
tą lekcją rozpoczynamy swój finalny praktyczny projekt w tym kursie a będzie to własna
biblioteka dom nie będzie ona tak zaawansowana jak na przykład jquery bo na to
poświęcilibyśmy pewnie kilkadziesiąt godzin przynajmniej a i tak musieliśmy mieć dobrze
przemyślany plan natomiast będę chciał ci pokazać w jaki sposób można się
zabrać za tworzenie takiej biblioteki oczywiście podejść do tego może być wiele ja
pokażę ci po prostu jedno z nich w tej lekcji będziemy sobie chcieli zrobić kilka podstawowych
rzeczy aby można było od czegoś zacząć i kontynuować później
powiem ci od razu że będziemy wszystko uruchamiać w tej mojej aplikacji czyli
tutaj w przykładzie 68 i skonfigurowałem go tak i to jest tutaj
istotne że będzie dla nas ładowany plik main jako module
czyli korzystamy z tych natywnych modułów w przeglądarce póki co dopiero później sobie
to przetranspilujemy do es5 i skorzystamy z webpacka i podłączyłem
również plik test js w tym pliku będziemy mogli sobie testować jak
działa nasza biblioteka natomiast w tym pliku main będziemy sobie inkludować wszystkie
moduły za pomocą import i te dwa pliki znajdują się tutaj w
tym katalogu mamy main i mamy test na razie są puste mamy
również jakiś index w którym pewne elementy się znajdują pojawiają się na stronie bo
później będą nam one potrzebne także zaczniemy sobie od pliku main
i będę tutaj chciał utworzyć jakby taką funkcję init która będzie
jakby rozpoczynać naszą bibliotekę a później będziemy tworzyć sobie już dodatkowe
moduły pamiętasz że w module wszystko jest jakby prywatne
czyli nie musimy tutaj tego oplatać żadną funkcją chciałbym od razu zatem utworzyć funkcję
o nazwie init i tutaj będę miał taki parametr który nazwę param
zaraz zobaczysz gdzie ta funkcja będzie wywoływana natomiast
chciałbym tutaj zrobić od razu coś takiego chciałbym rozróżniać czy będziemy
wyszukiwać elementy na stronie czyli tak jak na przykład w jquery podajemy string i szukamy
elementu jeżeli podamy specjalny string w jquery to można utworzyć element
lub opakować już istniejący element to będziemy chcieli za moment rozróżnić
natomiast to co chciałbym póki co zrobić to przepisać do window bo
wiemy że tutaj ta funkcja jest cały czas prywatna ale jeżeli przypiszę do window to będzie globalna equery
chciałbym tak nazwać naszą funkcję nie jquery ale equery eduweb query
powiedzmy i chciałbym do tego przypisać init czyli teraz w dowolnym kodzie
jeżeli skorzystamy z equery to tak naprawdę wywołamy naszą funkcje init która jest
w tym miejscu i tutaj będę chciał stworzyć po prostu kilka warunków wywoływać
tę funkcję będziemy tutaj w test na przykład w taki sposób że będzie mogli napisać
let powiedzmy lis czyli elementy li na stronie
równa się equery i podamy tutaj na przykład li
czyli tak samo jak jquery tylko tutaj nie mamy tego skrótu dolara bo go
nie przypisuje i nazwa to jest equery czyli to wpadnie nam konkretnie pod
parametr tutaj i tutaj będę chciał rozróżnić właśnie czy wyszukujemy elementu
jeżeli byśmy podali coś takiego to znaczy że chcę utworzyć element a jeżeli podałby
mi już istniejący element gdzieś w jakimś zdarzeniu na przykład poprzez this gdzie
będę miał element html albo tutaj bym wpisał document na przykład query selector
z jakiegoś powodu miałem ten element znaleziony w ten sposób to to nie
będzie string i też chciałbym to rozróżnić dlatego właśnie utworzyłem sobie tutaj na
początku taki właśnie warunek taką właśnie funkcję inicjującą więc
tutaj chciałbym mieć kilka warunków po pierwsze chciałbym utworzyć zmienną
nodes bo zobaczysz za moment że będziemy chcieli przekazywać czy to nowo utworzony
element czy już znaleziony na stronie właśnie dalej do naszej biblioteki więc
na razie napiszę null i teraz będziemy mieli warunki które będą wyglądać następująco zaraz
te funkcje utworzymy w osobnym zupełnie module ale chciałbym móc napisać is selektor
czyli jeżeli param uznajemy za selector to wtedy
chciałbym do nodes przypisać find elements
i przekazać ten parametr w przeciwnym wypadku chciałbym
sprawdzić czy ten podany selector czy to nie jest przypadkiem coś
takiego czyli będziemy chcieli sobie te nawiasy sprawdzić
no i będzie to w kolejnej funkcji która się będzie nazywać is html tag
też podamy param one mają zwrócić true lub false i w takiej sytuacji
do nodes chciałbym przypisać create element czyli
utworzyć taki element z tego parametru wszystkie te funkcje zaraz się pojawią ale
łatwiej jest to napisać tak jakbyśmy najpierw chcieli z tego skorzystać jeszcze jeden else if
tutaj będę chciał napisać czy is dom
node czyli jeżeli jest przekazany element już dom to wtedy będę chciał
napisać że nodes równa się po prostu param czyli ten gotowy element zauważ
zatem że na tym etapie pod nodes powinienem mieć jakieś elementy czyli
jeżeli funkcja find element będzie je zwracać to one tutaj będą create
element też musi zwrócić taki node też tutaj będzie a jeżeli od razu był tu przekazany
obiekt dom to też go tutaj przypiszemy okej i na razie
będziemy tutaj robić tyle po prostu chciałbym teraz utworzyć sobie te funkcje pomocnicze
typu is selector czy na przykład is html tag i tutaj jeszcze mamy
is dom node powinniśmy tutaj przekazać oczywiście param więc gdzie to będziemy
chcieli utworzyć otóż przejdźmy sobie do katalogu 68 start
js i tutaj chciałbym utworzyć folder utils i w tym folderze utils
będziemy mieli funkcje pomocnicze i jednym z modułów będzie check js te
nazwy oczywiście mogły być dowolne ale ja sobie to wymyśliłem w ten sposób i tutaj
chciałbym mieć tych kilka funkcji takich jak na przykład is selector czy
is html tag ja je teraz tutaj wkleję i na spokojnie możesz sobie przepisać
albo wkleić z gotowych plików postaram ci się je wytłumaczyć natomiast nie będziemy całkowicie
od zera ich pisać bo nie ma tutaj nic super skomplikowanego zauważ co jest
ważne od razu eksportuje sobie tę funkcję tę oraz tę żeby można
było je importować i is selector chciałbym żeby działał w ten sposób
że sprawdzamy czy podane podany string to jest czy podany w ogóle parametr
to jest string czyli w tym przypadku byłby to string i dodatkowo
chce utwierdzić się w przekonaniu że nie jest to html tag czyli
ta funkcja ma zwrócić false i że nie jest dom node zatem sprawdźmy
co to funkcja będzie robić gdybyśmy tutaj przekazali coś takiego zakładamy że chcemy
utworzyć nowy element ta funkcja sprawdzi najpierw czy type of jest to string
i następnie czy pierwszy znak jest taka
oto strzałka taki nawias i czy ostatni
znak jest to coś takiego czyli jeżeli przekażemy string który pierwszy znak i
ostatni ma taki tak jak zrobiliśmy tutaj to wtedy w tym miejscu możesz zobaczyć
że is html tag zwróci true i dlatego będziemy chcieli utworzyć nowy
element i w tym przypadku jest to string
ale jeżeli byśmy go przepuścili przez is selector to ta funkcja z kolei
sprawdzi że owszem jest to string ale funkcja is html tag zwraca True więc
ten warunek już nam się nie wykona zauważ że te warunki zapisuje sobie w takich oto nawiasach
po to żeby ładnie móc je złamać na kilka linijek i żeby to po prostu było bardziej
czytelne okej no i teraz dlaczego tutaj korzystam z char at jeżeli
pamiętasz że w tym kursie pokazywałem że ma byśmy napisać value starts with
i coś takiego jest to nowy zapis czy w zasadzie
nowa metoda na prototypie stringu ale pokazałem ci w lekcji poprzedniej
że mamy ten problem jeżeli później przetranspilujemy tę bibliotekę z użyciem transform runtime
to będzie mieli problem bo te metody które są na prototypie nie
będą zamienione więc tutaj musiałbym inkludować znowu ten core js i korzystać
z tych metod w inny sposób ale ja chciałbym żeby ten kod był jak najbardziej uniwersalny
i działał teraz bezpośrednio w przeglądarce a później żeby mógł być przetranspilowany
dlatego będę unikał korzystania z nowych metod na prototypie
na przykład stringu czy tablic dlatego skorzystałem z char at czyli jest to
stara metoda która na pewno będzie działać poprawnie i teraz ostatnia rzecz
którą chciałbym sprawdzić jest is dom node i tutaj będziemy sprawdzać czy przekazany
obiekt przekazany parametr jest to object czyli type of value równa
się object i dodatkowo czy value jest instancją element co
to jest element otóż w przeglądarce gdybyśmy sobie wpisali element
to okaże się że istnieje tutaj taki konstruktor i każdy element znaleziony
na stronie na przykład gdybym zaznaczył ten element mamy go tutaj zaznaczonego
więc dolar zero w konsoli kieruje na ten element tak samo jakbym go wyszukał
za pomocą na przykład query selector to jeżeli zapytamy czy ten element jest instancją
element to mamy zwrócone true dzięki temu wiem że jest to element z
drzewa dom czyli takie uproszczone warunki możemy sobie zrobić i mamy
tutaj już odpowiednie funkcje mam nadzieję że rozumiesz o co w nich tutaj chodzi
i zauważ że są one w check który możemy sobie teraz zaimportować w naszej
głównej bibliotece czyli tutaj napiszmy na górze zatem import i będę
chciał trzy rzeczy zaimportować będzie to is selector następnie
is html tag i następnie is dom node
from i tutaj musimy podać sobie ścieżkę więc jesteśmy
tutaj jakby w main następnie utils a więc ten sam katalog utils i check
zobaczmy natomiast tutaj będziemy mieli błędy bo find element na
przykład nie istnieje więc po prostu zróbmy sobie tutaj console log i powiedzmy
że jest to selector to wykomentuje tutaj
zrobimy console log i powiemy że jest to tag html i
tutaj na końcu zróbmy sobie console log
i napiszmy że jest to element dom okej
teraz nam to powinno już działać to sobie może stąd wyrzucę żeby
było trochę czyściej i zobaczymy po odświeżeniu tutaj widzimy
że mamy selector dlatego że przy użyciu tej biblioteki napisaliśmy
tutaj coś takiego okej czyli wychodzi na to że nam to nie do końca zadziałało sprawdźmy
raz jeszcze okej teraz po odświeżeniu jest dobrze czyli tag html jeżeli napiszemy coś
takiego albo na przykład klasę będzie to selector czyli
jest poprawnie a gdybym tutaj przekazał element już wcześniej znaleziony czyli
na przykład document query selector li zobaczmy to
pokaże nam element dom więc na tej podstawie już nasza funkcja equery
pozwala przyjmować różne parametry i będziemy mogli tutaj różne
akcje wykonać więc tak by to dokładnie wyglądało mamy tutaj fajne utility
check do którego będziemy mogli jeszcze dodać inne funkcje a importujemy to w
tym miejscu okej i w tej lekcji to by było na tyle w kolejnych lekcjach będziemy
dalej sobie tę bibliotekę budować między innymi dodając sobie te potrzebne nam
funkcje abyśmy mogli te elementy tworzyć i utworzymy również specjalną klasę
equery która będzie zawierać jeszcze inne metody