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 będzie już prościej dlatego że będę chciał dodać sobie jeszcze kilka różnych metod
które pozwolą nam pracować z klasami lub na przykład z kodem css więc
nie musimy już tłumaczyć teraz wszystkiego w jaki sposób to działa dlatego że już zobaczyłeś
i najważniejsze podwaliny pod naszą bibliotekę już mamy dlatego teraz zobaczmy co moglibyśmy
jeszcze zrobić w pliku attributes będę chciał po prostu z tego obiektu dodać sobie
jeszcze kilka innych metod i na przykład chciałbym mieć metody at class która przyjmie
jakąś klasę i znowu tak jak w jquery ona ją przypisze dla
wszystkich elementów czyli tutaj będziemy mogli po prostu zrobić this each mamy
już tą funkcję pomocniczą jak widzisz ona potem nam się właśnie przydaje że na wszystkich nodach
możemy sobie iterować i funkcją strzałkową możemy zrobić coś takiego jak mieliśmy
tutaj czyli dla każdego elementu node będę chciał ustawić klasę
za pomocą class list add czyli
tutaj korzystamy z tego natywnego class list które jest dostępne i skorzystamy z class name
od razu ci powiem że gdyby to była biblioteka taka zaawansowana jak jquery
to tutaj na przykład musielibyśmy najpierw sprawdzić czy class list jest w ogóle jest dostępne
więc mielibyśmy warunek typu if na przykład class list in
node tutaj w tej funkcji w zasadzie musielibyśmy to zrobić jeżeli tak
to byśmy korzystali z class list jeżeli nie to mielibyśmy jakąś funkcję która
pomagała by nam tą klasę dodać w inny sposób my się na tym nie będziemy skupiać ale dobrze
podzielona biblioteka jak widzisz działa tak że jeżeli później chcemy dodać wsparcie dla
at class dla starszych przeglądarek które nie wspierają class list to możemy to zrobić dokładnie
w tym miejscu zobaczmy zatem czy taki zapis wystarczy aby
to add class zostało dodane tutaj poprzez mixin attributes do
klasy equery czyli spróbujmy sobie tutaj napisać lis add class
na przykład red zobaczmy odświeżam ja
nie skonfigurowałem tej klasy więc nic się nie wyświetla ale zauważ że ta klasa się dodała
do wszystkich elementów więc super fajnie nam to działa no i teraz chciałbym dodać sobie
jeszcze kilka innych metod takich jak na przykład remove class toggle class czy
has class dlatego ja je tutaj wkleję postawimy
tutaj przecinek i wklejam takie oto metody przepisz je sobie albo wklej też z gotowych
plików jak widzisz one działają tak samo tylko operują na class list remove toggle
czy has dzięki temu wszystkie nasze obiekty tutaj zwracane będą
miały dostęp do takich oto metod i na koniec chciałbym dodać
sobie jeszcze jedną metodę a będzie to css i chciałbym żeby ona działała w ten sposób
że ktoś będzie mógł napisać lis css i na przykład
ustawić właściwość kolor na wartość red i to ustawi
kolor dla wszystkich elementów dodatkowo chciałbym zrobić tak że jeżeli ktoś tutaj
napisze tylko samo kolor to zwróci mu wartość koloru dla pierwszego
elementu i dodatkowo jeszcze jedną rzecz żeby można było podać taki obiekt
gdzie będzie na przykład color red i powiedzmy font size
12 pikseli czyli 3 takie możliwości muszą być więc
najpierw zaczniemy od najprostszej color red utworzymy
sobie zatem tutaj metodę css, która wiemy że musi przyjmować dwa parametry property
i value gdzie property to też może być obiekt i tutaj będę chciał sobie
zrobić warunek który sobie teraz tutaj wrzucę w ten
sposób czyli tak jak robiliśmy tutaj na górze z tym undefined jeżeli property
nie jest równe undefined i value nie jest równe undefined czyli zostały
podane obydwa tak jak to zrobiłem tutaj jedno i drugie to
wtedy chcę dla wszystkich elementów czyli this each tak jak mieliśmy na przykład tutaj wykonać
node i tutaj już na tym node operujemy na tym obiekcie oczywiście
z obiektowego modelu dokumentu na tych nie zrobimy sobie node style
i tutaj przekażemy dynamicznie property na przykład kolor
równa się wartość zobaczmy odświeżamy
i mamy wszędzie tutaj dany kolor red czyli pierwszy warunek nam zadziałał
będziemy mieli jeszcze dwa warunki ale najpierw zrobimy ostatni napiszmy
else czyli powiedzmy że tylko prop zostało podane to wtedy chcę zwrócić return this
get zero pamiętasz że do nam zwraca tylko pierwszy element i chcę
odwołać się na nim do style prop tak to będzie działać
czyli jeżeli ktoś zapyta jaki jest kolor i chciałby
to zrobić w console logu tutaj to
wtedy wykona się tamten warunek i zobaczmy zostanie nam zwrócony tutaj pusty ciąg
bo taki atrybut nie jest przypisany do elementu gdyby był to taka wartość
zostałaby zwrócona czyli zadziałałoby to jak najbardziej poprawnie natomiast
chciałbym dodać jeszcze ten warunek o którym mówiłem jeżeli ktoś tutaj napiszę lis css
i poda obiekt gdzie będzie na przykład kolor rad i powiedzmy
font size niech to będzie 20 pikseli żeby to
było widać więc chcę sprawdzić czy to co jest tutaj podane jest obiektem dlatego
w tym miejscu będę chciał sobie zrobić else if jakiś warunek tutaj
będziemy mieli kod i dopiero później będzie else tutaj chciałbym sobie sprawdzić
czy podany pod prop element jest obiektem więc chciałbym mieć funkcję is object
prop która mi zwróci czy jest to obiekt i
zaraz sobie ją napiszemy ale jeżeli jest to obiekt to będziemy chcieli przeiterować
przez wszystkie właściwości tego obiektu więc ja teraz tutaj wkleję kawałek kodu będzie
to wyglądać tak że pętlą for in iteruję w tym obiekcie prop czyli
będziemy mieli pod key za każdym razem kolor czy font size
a kiedy odwołamy się do prop key to będziemy mieli te wartości
czyli tutaj tak naprawdę nie ma nic skomplikowanego i dla każdego elementu będę
chciał je po prostu dodać w taki oto sposób jeżeli to znowu wygląda na
zbyt skomplikowane na spokojnie sobie na to zerknij tutaj nie powinno być dla ciebie nic
nowego jedynie powinniśmy mieć możliwość sprawdzenia czy jest to obiekt więc
chciałbym na samej górze móc sobie zaimportować właśnie taką funkcję chciałbym
sobie dodać do utils które już mamy tutaj i do check dlatego ja ją
sobie tutaj wkleję funkcja będzie wyglądać następująco is object
przyjmuje wartość i sprawdza czy ta wartość jest w ogóle podana czy jest wartością prawdziwą wtedy
prawdopodobnie może to być obiekt i dodatkowo czy value to string równa
się object object dlaczego tak jeśli byśmy utworzyli sobie o i
będzie to pusty nawet obiekt to jeżeli zrobimy o to string
to zwraca nam to właśnie coś takiego w ten sposób będę mógł sprawdzić czy
podana wartość jest obiektem i zauważ że fajnie tutaj te utils sobie tworzymy w
jednym pliku i będę chciał teraz sobie tylko to is object zaimportować
właśnie w tym miejscu gdzie mamy attributes więc na górze napiszemy import is object
więc tylko tę jedną rzecz chcę sobie wyciągnąć from i znowu
musimy się skupić na ścieżce czyli jesteśmy w attributes a więc 1 katalog do góry i
następnie utils więc 1 katalog do góry wygląda tak utils check
js w ten sposób sobie to zaimportujemy i zobaczymy czy to zadziała jak
widzimy tak wszystkie style są poprawnie dodawane jak widzisz kolor red i font size
20 więc w ten sposób możemy sobie to jak widzisz wykonać
i zakończyliśmy prace już naszym pliku attributes nie będę dodawał więcej klas
czy więcej w zasadzie metod które są dodawane do prototypu
gdybyś chciał oczywiście możesz to zrobić ale już widzisz w jaki sposób taką
bibliotekę możemy rozwijać w tej lekcji zatem to wszystko a w kolejnej
skupimy się na dodaniu kolejnych funkcjonalności