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.
Jedną z najciekawszych rzeczy jaka zawitała do języka JavaScript wraz z EcmaScript
2015 jest możliwość korzystania z modułów jest to coś
co dla programistów z innych języków programowania przez lata było oczywiste niestety
w języku JavaScript tak nie było więc jeżeli programujesz od jakiegoś czasu w JavaScripcie to
wiesz że możemy w języku JavaScript do strony dodać na przykład kilka skryptów
no i jeżeli dodamy 1 skrypt i on będzie miał jakiś globalne zmienne czy
funkcje to one są w innym skrypcie załadowanym później można powiedzieć pod
nim dostępne czyli jeżeli chcieliśmy sobie zrobić modułowość swojego
kodu to mogliśmy to zapisać w kilku różnych skryptach i jeden pod drugim je dołączać
natomiast społeczność programistów JavaScript przez lata stworzyła wiele różnych
rozwiązań jak można tworzyć moduły więc jeżeli kiedykolwiek słyszałeś
o takim rozwiązaniu jak na przykład require js albo o modułach właśnie
common js czy amd albo jeszcze niedawno umd czyli universal module
definition to właśnie to wszystko były projekty próby rozwiązania
problemu nie istniejących modułów w języku JavaScript czyli
brakującej możliwości pisania własnych modułów i w es6 to się zmieniło
i teraz będę chciał ci pokazać w jaki sposób można pracować z modułami to
co jest istotne o ile przeglądarki nowoczesne bardzo dobrze już wspierają EcmaScript
6 o tyle jeżeli chodzi o sam zapis modułów to on nie jest w samej
specyfikacji EcmaScript 6 czyli jak zapisywać moduły tak ale
jak je implementować już nie dlatego tak naprawdę dopiero od niedawna te nowe
przeglądarki zaczynają sobie to implementować czyli w momencie kiedy ja te słowa wypowiadam
to przeglądarce safari na macu działają moduły i na przykład
w przeglądarce Google Chrome Canary czyli niezwykły Chrome ale Chrome Canary można
włączyć sobie obsługę modułów i będę chciał ci teraz pokazać jak zrobić żebyś
mógł razem ze mną pracować natomiast być może w momencie kiedy ten kurs oglądasz nie będziesz już
musiał już tego włączać natomiast gdybyś miał przeglądarkę Google Chrome Canary to
możesz przyjść tutaj do Chrome Flux
i tutaj możemy sobie wyszukać czegoś takiego jak experimental
web platform
features dokładnie to jest w tym miejscu ja tutaj sobie to wcześniej włączyłem
więc mogę wyłączyć poprzez disable jeżeli tego nie włączałeś to będziesz
tutaj miał napis enable więc po prostu sobie to włącz i zrestartuj przeglądarkę
dzięki temu moduły u ciebie będą działać natomiast pokażę ci teraz tylko
jak to wygląda w kodzie czyli na czym polegają te moduły powiemy
sobie dopiero w jednej z kolejnych lekcji bo chciałbym się skupić na tym jak pracować z modułami a
nie konkretnie one działają w przeglądarce dlatego że w JavaScript możesz wykonywać również
w środowisku node js lub pracować z tym modułami za pomocą na przykład
webpacka co będziemy robić później natomiast generalnie wygląda to tak że
zamiast ładować normalnego skryptu gdybyśmy podejrzeli źródło strony to
ładujemy skrypt który będzie miał type module czyli tak to wygląda w przeglądarkach
które to wspierają i ten skrypt tutaj jest podłączony przez moją aplikacja automatycznie natomiast ma
typ module bo w tym pliku config json w nim są wszystkie lekcje dopisałem
script type module tak napisałem tę aplikację że jeżeli dopiszemy tutaj script
type module to jest to w ten sposób ładowane i tyle musisz wiedzieć w tej lekcji natomiast
dopiero w jednej z kolejnej lekcji powiemy więcej na temat korzystania z modułów w
przeglądarce skoro już wiemy że ten plik scripts js jest
załadowany do przeglądarki z atrybutem type równym module teraz będę chciał
ci pokazać w jaki sposób w ogóle w ecmascript 6 pracuje się z modułami czyli
zapamiętaj że to co ci teraz pokażę to definiuje specyfikacja ecmascript
natomiast jak to miało działać przeglądarce czyli na przykład na atrybut modul to
już definiuje specyfikacja html czyli teraz zobaczymy po prostu jak się pracuje
z modułami niezależnie czy to będzie w przeglądarce czy gdzieś indziej istotą
modułów jest to że z jednego możemy coś wyeksportować a w innym możemy
to zaimportować i teraz chciałbym móc w tym głównym module który podłączyłem
czyli scripts chciałbym zaimportować sobie employee żeby
móc z tej klasy skorzystać i bardzo ważne jest to że mamy słowo
kluczowe import ono nie zadziała w zwykłym skrypcie tylko w przeglądarce musi to
być skrypt który ma type module ale okej będzie działać innych środowiskach
więc tak to zapisujemy i teraz chciałem napisać import employee
from i tutaj podajemy string w którym będzie jakby
ścieżka do pliku starego chcę to zaimportować zobaczmy mamy scripts
w tym miejscu i chcę coś zaimportować z employee jest to na tym samym poziomie dlatego
mogę napisać kropka slash i to odwołuje się do tego samego katalogu i teraz
napiszmy employee js czyli chcę zaimportować
coś z tego pliku employee zapiszmy zobaczmy co na to przeglądarka i okaże
się że ten moduł nie zawiera żadnego eksportu
który nazywa się default dlaczego bo jeżeli chciałbym coś zaimportować
z employee js to stąd muszę coś wyeksportować i pokażę
ci że możemy to zrobić wpisując tutaj export default employee
dlaczego default o tym będzie mówić lekcji kolejnej natomiast jeżeli tutaj
mam zdefiniowaną klasę i ją wyeksportuje w taki sposób to w innym
pliku mogę ją zaimportować zobaczmy błąd zniknął pojawił
się kolejny że person jest niezdefiniowane i widzimy że jest to w kilku employee
dlatego że w tym pliku employee z kolei chciałbym rozszerzyć person
a to tutaj nie istnieje więc spróbujemy sobie to zaimportować napiszmy
import person from i też jest to na tym samym poziomie względem
pliku employee obok jest person więc napiszmy person js teraz
pojawi się kolejny błąd bo person js nic nie eksportuje więc
wejdźmy sobie do person i napiszmy export default person
okej i teraz mamy to wszystko ładnie podzielone i teoretycznie
powinno działać zobacz nazywam się Jan Kowalski i pracuję jako programista tutaj
pojawiają się tylko błędy z kodowaniem polskich znaków nie wiem dlaczego ale wygląda na to
że jest jakiś back w przeglądarce Google Chrome Canary tak nie powinno być niemniej
jednak poza tym wszystko działa czyli do strony gdybyśmy podejrzenie źródło raz jeszcze dołączamy
wyłącznie jeden plik który ma type module w przypadku przeglądarek
teraz nie dołączam tutaj nic innego ale w tymże pliku importuje
sobie to co chce czyli importuje employee on z kolei importuje
sobie person i zwraca employee który już rozszerzył klasę person i dlatego
mogę utworzyć sobie nowy obiekt z tej klasy tak zatem wyglądają
podstawy jeżeli chodzi o tworzenie modułów natomiast to
co jest ciekawe to moduły nie tworzą nam globalnych zmiennych czyli tutaj wydawałoby
się że tego wszystkiego nie oplotłem jakąś funkcją na przykład anonimową i że
mamy tutaj taką zmienną jak employee 1 no więc sprawdźmy czy mogę w przeglądarce napisać
employee 1 na przykład say hello zobaczymy błąd że
taka zmiana jest niezdefiniowana czyli to co jest ważne każdy moduł ma swoją własną przestrzeń
i nie musi być opleciony żadną inną funkcją wszystko co jest tutaj nie
jest widoczne na zewnątrz i plus tego jest taki że jeżeli na przykład w person
tutaj mieliśmy funkcję format i jej nie wyeksportowałem to zauważ że eksportując
z klasy person say hello korzysta z niej i to wszystko działa bo mieliśmy tutaj
wielkie litery ale sama funkcja format nie jest dostępna nigdzie indziej czyli
jeżeli employee zaimportował sobie person to gwarantuję ci że w tym miejscu gdybyśmy
zrobili console log format to otrzymamy błąd czyli ta
funkcja nie została tutaj w żaden sposób zaimportowana i jest ona prywatna
lokalna wyłącznie dla tego modułu person js to
by było tyle tytułem wstępu pokazałem ci jak to wygląda w przeglądarce ale na razie to jest nieistotne
istotny jest sam zapis który tutaj będzie w różnych środowiskach wyglądał
tak samo i ten zapis może być na bardzo wiele różnych sposobów realizowany
o czym powiemy sobie w lekcji kolejnej