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 kontynuujemy sobie jeszcze temat destructuring'u i pokażę ci jak
możemy wyciągać dane z bardziej zaawansowanych zagnieżdżonych struktur, co
wizualnie przynajmniej w kodzie na początku będzie wyglądać strasznie, ale jeżeli
na spokojnie sobie to przerobisz na pewno to zrozumiesz i dodatkowo pokażę ci,
że możemy łączyć destructuring obiektów oraz tablic. Nie ma z tym najmniejszego problemu,
więc przejdźmy do kodu i mamy taki obiekt, który jest już nieco bardziej zaawansowane.
Z tego powodu, jeżeli byśmy chcieli sobie tworzyć zmienne i wyciągać do nich
poszczególne właściwości czy wartości z tego obiektu, no to musielibyśmy sporo
zmiennych utworzyć i też one odwoływałyby się do tych struktur bardziej zagnieżdżonych.
Dlatego dobrze, że możemy za pomocą destructuring'u w łatwiejszy sposób się do
nich dobrać. Powiedzmy, że chciałbym wyciągnąć firstName, lastName, ale i na
przykład experience, która jest tutaj albo na przykład nazwę zawodu,
czyli programista. Już będę chciał ci pokazać jak to zrobić. Na
początku wyciągniemy sobie firstName i age. Otworzę sobie znowu za pomocą let
zmienne. One będą tutaj w przypadku jakby w takim obiekcie,
czyli pamiętasz, że po tej stronie przy piszemy person lub jeszcze ten
domyślny obiekt. Warto to zrobić, okej i teraz
tutaj będziemy chcieli zrobić zmienną firstName, to już widziałeś, ale chciałbym utworzyć zmienną
tak naprawdę o nazwie fName, a tutaj to pisze po to, żeby ci przypomnieć, czyli
tak naprawdę lokalną zmienną z użyciem LED utworze o nazwie fName, która będzie miała wartości
w tym przypadku Jan. Dodatkowo chcę wyciągnąć age i w konsoli
sobie napiszę fName i age, tak aby się upewnić, że wszystko działa jak należy. Jest
okej i teraz będziemy sobie chcieli wyciągnąć kolejną rzecz i w
tym przypadku będzie to nazwa tego zawodu, czyli programista,
więc chciałbym utworzyć zmienną, która bezpośrednio będzie przechowywała tę wartość.
Zmienną tę chciałbym nazwać jobName, czyli chciałbym
ją tutaj sobie mógł od razu podstawić i ona ma przechowywać programista, no
i tutaj zaczynają się schody, można by było powiedzieć. W jaki sposób to mamy zrobić? Otóż
po age postawię sobie przecinek i napiszę job i chociaż
to wygląda dziwnie, to ja nie będę tworzył zmiennej o nazwie job, tylko tutaj muszę
jakby odwołać się do tego, co jest obiekcie. Pamiętaj, że to co tutaj pokazujemy,
to jest tak naprawdę jakby wzorzec, czyli innymi słowy gdybym to zapisał
w ładny sformatowany sposób, to myślę, że miałoby to sens, bo zauważ jeszcze, jeśli
to job usunę, co by się tutaj działo. Można to tak zapisać. Mamy
obiekt firstName i tutaj napisałam fName, to znaczy, że chcę utworzyć zmienną
fName, która przechowuje wartość, która dokładnie znajduje się w tym miejscu, age będzie
miała wartość, która jest tutaj. Normalnie wyglądałoby to tak, ale że w obiektach już
ci to pokazywałem, jeżeli coś się powtarza dwa razy, nie musimy tego pisać, ale gdyby
się powtórzyło, to zauważ, że też ma to sens, mamy age, więc chce utworzyć
zmienną o tej nazwie, która przechowuje tę wartość. Tak by to wyglądało. No,
ale nie muszę tego pisać, jeżeli nazwa jest taka sama, dlatego tutaj mogę napisać job,
bo chcę jakby wejść do tego obiektu i muszę go tak jakby otworzyć,
bo tutaj pisze ten wzorzec i w tym miejscu jest zmienna name, więc muszę ją
napisać i nazwa mojej zmiennej, chcę żeby przechowywała
to co jest tutaj, więc dopiero wpisuje ją w tym miejscu, czyli jobName. Oczywiście
jeżeli byśmy to zapisali w jednej linijce, byłoby to mniej czytelne, ale mam nadzieję, że teraz
nabiera to sensu i zauważ, że okazuje się, że poprawna wartość została
do tej zmiennej przypisana. Teraz, jeżeli chciałbym utworzyć zmienną jobExperience,
tutaj sobie ją też wpiszemy, to
pewnie już wiesz, że łatwo ją tutaj podać, mogę to zrobić w ten sposób wpisując
tutaj, tak jak jest w obiekcie experience i jobExperience. Oczywiście,
gdybym chciał nazwać zmienną tylko experience, to mógłbym tutaj napisać experience
równa się ekspiriens albo tylko tak to zostawić. Dokładnie tak samo jak wyżej w przypadku
age, ale sprawdźmy czy też ma to sens, jak najbardziej wszystko działa jak
należy, czyli widzisz, że tutaj tak naprawdę tworzymy wzorzec, który ma być dopasowany
do tego. Wyobraź sobie, że ten obiekt tutaj chociaż nie do końca jest to obiekt, nałożylibyśmy
tutaj, bo przez taką kalkę, można powiedzieć, na górę tego obiektu i to,
co by się pokryło, czyli na przykład jobName, w tym miejscu z tym. Wyciągamy
sobie do nazwy takiej zmiennej. Wspominałem wcześniej, że możemy jeszcze
łączyć sobie destructuring obiektów i tablic, więc powiedzmy, że chciałbym
wyciągnąć sobie drugi ulubiony, drugą ulubioną liczbę. Tutaj mam
coś takiego jak ulubione liczby. Jest to lista i chciałbym wyciągnąć drugą, czyli chcę mieć zmienną,
która będzie się nazywała na przykład second i chciałbym,
żeby w niej była ta wartość, więc znowu tutaj musimy sobie napisać coś co wygląda
jak wzorzec. Odwołamy się zatem do for favNumbers. Jest
to obiekt, następnie list. Musimy to napisać. Jest to tablica i
skoro to, co ja teraz napiszę tutaj. Zostanie przyłożone jakby
do tej tablicy, to tutaj mogę napisać to, co było w lekcji poprzedniej, czyli wzorzec destructuring'u
ten tablic. Chcę pominąć pierwszy element, więc piszę przecinek, a drugi
chcę zapisać pod zmienną second, czyli pamiętasz, że gdybyśmy to całkowicie sobie
wyjęli i tutaj bym napisał let, a tutaj przyłożył taką tablice to pod
zmienną second miałbym to, co jest tutaj, czyli 7, więc dokładnie tak samo będzie to działać
w tym miejscu. Chociaż znowu wygląda może na początek nieco dziwnie, to
zadziała poprawnie jeżeli tutaj bym napisał secund, to powinniśmy mieć
wartość 7 i taka wartość też się pojawiła. Jak zatem widzisz,
możemy tworzyć takie bardziej zaawansowane wzorce, które pozwolą nam wszystko wyciągnąć
i chociaż na pierwszy rzut oka mogłoby się wydawać, że nie wiadomo jakie zmienne tworzymy,
to tak naprawdę utworzyliśmy tutaj wyłącznie te zmienne, które ja w tym miejscu wypisałem.
Żadnej innej zmiennej nie ma tutaj, takiej jak na przykład favNumbers w naszym zakresie. Kiedy
nabierzesz już doświadczenia to to wszystko co jest tutaj, będziesz mógł zapisać w jednej linijce. Będzie
to nieco dłuższe, ale oczywiście będzie działać dokładnie tak samo. Poćwicz sobie troszeczkę
z tym zapisem. No i mam nadzieję, że już widzisz, że jest on bardzo przydatny. Nie
zawsze jednak będziesz korzystał z takich zagnieżdżonych struktur, ale jeżeli przyjdzie taka potrzeba, to
bez trudu zrób z nich wyciągniesz odpowiadające ci dane i z tymi danymi będziesz
już mógł na podstawie zmiennej później pracować.