JS, jakiego jeszcze nie znasz. Na dobry początekTekst

0
Recenzje
Przeczytaj fragment
Oznacz jako przeczytane
Jak czytać książkę po zakupie
Czcionka:Mniejsze АаWiększe Aa


Dane oryginału

Original edition copyright © 2019–2020 Getify Solutions, Inc. All rights reserved. Title of English-language original: You Don’t Know JS Yet. Get Started by Kyle Simpson, ISBN 978-1-64786-200-8. Polish-language edition © 2020 by Polish Scientific Publishers PWN Wydawnictwo Naukowe PWN Spółka Akcyjna. All Rights reserved.

Przekład Natalia Chounlamany-Turalska na zlecenie WITKOM Witold Sikorski

Projekt okładki polskiego wydania INT-MEDIA Dawid Mazur na podstawie oryginału

Wydawca Wioleta Szczygielska-Dybciak

Redaktor prowadzący Jolanta Kowalczuk

Redaktor Małgorzata Dąbkowska-Kowalik

Koordynator produkcji Anna Bączkowska

Zastrzeżonych nazw firm i produktów użyto w książce wyłącznie w celu identyfikacji.

Choć wydawca i autor działali w najlepszej wierze i starali się zapewnić poprawność informacji oraz instrukcji zawartych w tej książce, zrzekają się wszelkiej odpowiedzialności za błędy i przeoczenia, w tym jakiejkolwiek odpowiedzialności za szkody wynikłe z użycia tej książki bądź polegania na niej. Zamieszczone w tej książce informacje i instrukcje wykorzystujesz na własne ryzyko. Jeśli któryś z zawartych lub opisywanych przykładów kodu bądź technologii jest przedmiotem licencji open source lub własności intelektualnej osób trzecich, odpowiadasz za wykorzystywanie go zgodnie z tymi licencjami/prawami własności.

Getify Solutions, Inc.

Copyright © for the Polish edition by Wydawnictwo Naukowe PWN SA

Warszawa 2020

ISBN 978-83-01-21530-9

eBook został przygotowany na podstawie wydania papierowego z 2020 r., (wyd. I)

Warszawa 2020

Wydawnictwo Naukowe PWN SA

02-460 Warszawa, ul. Gottlieba Daimlera 2

tel. 22 69 54 321, faks 22 69 54 288

infolinia 801 33 33 88

e-mail: pwn@pwn.com.pl; reklama@pwn.pl

www.pwn.pl

Na początku chciałbym podziękować mojej żonie i dzieciom, których nieustanne wsparcie motywuje mnie do działania. Chciałbym również podziękować pierwszym pięciuset osobom, które wsparły na Kickstarterze mój projekt „You Don’t Know JS” (YDKJS, pierwsze wydanie) 1 , a także setkom tysięcy osób, które kupiły i przeczytały te książki. Bez waszego wsparcia finansowego nie byłoby tego drugiego wydania. Dziękuję też pracownikowi pewnego ptasiego serwisu społecznościowego, który podczas rozmowy kwalifikacyjnej powiedział, że „nie znam JS wystarczająco dobrze”. To pomogło mi w znalezieniu nazwy dla tej serii książek.

Na swojej obecnej ścieżce kariery bardzo wiele zawdzięczam Marcowi Grabanskiemu i Frontend Masters. Wiele lat temu Marc dał mi szansę oraz okazję spróbowania sił w nauczaniu i gdyby nie to doświadczenie, nie zacząłbym pisać książek! Frontend Masters jest głównym sponsorem drugiego wydania YDKJS pod tytułem „You Don’t Know JS Yet” (JS, jakiego jeszcze nie znasz – JSJJNZ). Dziękuję Frontend Masters (i Marcowi).

Na zakończenie dziękuję mojemu redaktorowi Simonowi St. Laurent, który pomógł mi w napisaniu pierwszej serii YDKJS i był moim pierwszym redaktorem. Jego pomoc i wskazówki zrobiły na mnie ogromne wrażenie i odgrywały ważną rolę w kształtowaniu mnie jako pisarza. Dziękuję Ci Simonie za wskazywanie mi drogi i za ulepszanie tych książek, począwszy od tego pamiętnego spotkania wiele lat temu w Driskillu, podczas którego narodził się pomysł YDKJS, aż po dziś!


Frontend Masters (https://frontendmasters.com/) to główny sponsor drugiego wydania serii książek You Don’t Know JS (Tajniki języka JavaScript) pod tytułem You Don’t Know JS Yet (JS, jakiego jeszcze nie znasz).

Frontend Masters pomagają w doskonaleniu umiejętności za pomocą zaawansowanych, nowoczesnych kursów programistycznych w zakresie technologii frontendu, z materiałami wideo o najwyższej jakości dostępnej w Internecie. Oferują ponad 150 kursów do wyboru, zapewniając dostęp do wiedzy eksperckiej, która pozwoli ci osiągnąć dużo lepsze efekty w nauce, dlatego nie zwlekaj i zapisz się już dziś!


Biblioteka Frontend Masters zawiera wiele rewelacyjnych kursów, między innymi kursy Kyle’a (https://frontendmasters.com/teachers/kyle-simpson/), które są doskonałym uzupełnieniem dla tej serii książek. Wszystkie warte są uwagi, a w szczególności:

 • Getting Started with JavaScript

 • Deep JavaScript Foundations

 • JavaScript: The Recent Parts

Spis treści

Przedmowa

Wstęp

Mocne i słabe strony

Tytuł?

Misja

Droga

Rozdział 1. Czym jest JavaScript?

O tej książce

O co chodzi z tą nazwą?

Specyfikacja języka

Wiele twarzy

Wstecz i w przód

Kwestia interpretacji

Ściśle mówiąc

Definicja

Rozdział 2. Badanie JS

Każdy plik jest programem

Wartości

Deklarowanie i użycie zmiennych

Funkcje

Porównania

Organizacja kodu w JS

W głąb króliczej nory

Rozdział 3. Podróż do korzeni JS

Iteracja

Domknięcie

Słowo kluczowe this

Prototypy

Pytanie „Dlaczego”

Rozdział 4. Szersza perspektywa

Filar 1: zakres i domknięcie

Filar 2: prototypy

Filar 3: typy i koercja

Z prądem

Po kolei

Dodatek A. Dalsza analiza

Wartości kontra odwołania

Tyle postaci funkcji

Warunkowe porównania z koercją

„Klasy” prototypowe

Dodatek B. Ćwicz, ćwicz, ćwicz!

Ćwiczenia z porównań

Ćwiczenia z domknięć

Ćwiczenia z prototypów

 

Sugerowane rozwiązania

Przypisy

Przedmowa

Gdy zobaczyłem tweet reklamujący kampanię crowdfundingową pierwszej serii książek zatytułowanej You Don’t Know JS, pomyślałem sobie: „Do diabła z tym Kylem Simpsonem. Oczywiście, że znam JavaScript!” Miałem już wtedy wieloletnie doświadczenie w pracy z JavaScriptem w wiodących firmach technologicznych, dlatego wydawało mi się, że mam prawo zlekceważyć to prowokacyjne twierdzenie.

Gdy kampania zbierania funduszy na opublikowanie książki zakończyła się sukcesem, zauważyłem, że ta seria wzbudziła entuzjazm wielu osób, dlatego postanowiłem dać jej szansę. Choćby po to, aby udowodnić wszystkim, że ja znam JavaScript. Gdy zagłębiłem się w lekturze, zdobywaniu informacji towarzyszyło mocne uczucie zaskoczenia, a może nawet pewna irytacja. Kyle ma talent do wygłaszania twierdzeń, które podważają mój punkt widzenia oraz zmuszają do myślenia i w końcu uznania jego racji (choć nigdy osobiście mu tego nie przyznam!).

Jak się okazało, nie znałem JavaScriptu. Nie wiedziałem, dlaczego stosowałem pewne wzorce. Nie wiedziałem, dlaczego w pewnych sytuacjach JavaScript działa tak, a nie inaczej. I nie znałem wielu niuansów językowych, które wydawało mi się, że już znam. Nie wiedziałem, jak wiele nie wiedziałem i to czyniło mnie gorszym programistą.

Właśnie tu leży ogromny potencjał tej serii książek. Są one kierowane nie tylko do osób rozpoczynających naukę języka (choć do nich także), lecz także do wszystkich programistów, którzy traktują swój zawód jak rzemiosło, chcą doskonale władać swoimi narzędziami, chcą opanować tajniki swojej profesji i chcą stosować najwłaściwsze metody rozwiązywania problemów.

Podziwiam to, że Kyle i jego praca nie ulegają aktualnym trendom w świecie programowania. Nie oznacza to, że Kyle nie zdaje sobie sprawy z tego, co dzieje się w społeczności, lecz że mimo to dąży do uzyskania jak najlepszych odpowiedzi na trafne pytania. To często stawia go w opozycji do najnowszych „najlepszych praktyk”, ale tego tak naprawdę potrzebujemy: punktu widzenia nieulegającego tymczasowym wpływom i odwołującego się do podstawowych prawd. Na tym właśnie polega sukces tej serii książek. Mimo upływu lat pierwsze wydanie You Don’t Know JS jest nadal aktualne! A ze względu na stale zmieniający się krajobraz technologii JavaScript, niewiele projektów opiera się próbie czasu.

A teraz porozmawiajmy o tej pierwszej książce: Na dobry początek. Być może rozważasz pominięcie jej, ponieważ uważasz, że początek masz już za sobą. Jednak warto ją przeczytać! Zdziwisz się, ile detali, niuansów i dziwactw kryje się w podstawowych elementach JavaScriptu. Warto opanować te podstawy przed przejściem do konstrukcji składniowych języka. Jest to doskonałe przygotowanie do biegłego opanowania języka JavaScript.

Dlatego zainwestuj w swoją przyszłość i przeczytaj tę książkę, zdobywając ukrytą w niej wiedzę. Te solidne podstawy przydadzą ci się dużo bardziej niż jakikolwiek framework. Frameworki pojawiają się i znikają, natomiast w języku JavaScript będziemy pisać jeszcze przez wiele lat. Zachowaj otwarty umysł i bądź gotowy na zakwestionowanie z góry przyjętych opinii.

Ponieważ prawdopodobnie, tak jak ja, przekonasz się, że nie znasz (jeszcze) JavaScriptu.

~~

Brian Holt

Starszy menedżer produktu

Visual Studio Code i Node.js na platformie Azure

Microsoft

Wstęp

Witaj w JS, jakiego jeszcze nie znasz(JSJJNZ) – drugim wydaniu cieszącej się uznaniem serii książek You Don’t Know JS (YDKJS).

Jeśli przeczytałeś już jakąś książkę z pierwszego wydania serii, po nowym wydaniu możesz spodziewać się uaktualnionego podejścia z szerokim omówieniem zmian wprowadzonych w języku JavaScript (JS) w ciągu ostatnich pięciu lat. Mam jednak nadzieję i przekonanie, że zauważysz ten sam respekt wobec języka JavaScript i wewnętrznych mechanizmów jego działania.

Jeśli po raz pierwszy spotykasz się z tą serią, cieszę się, że tu trafiłeś. Przygotuj się na daleką podróż w głąb języka JavaScript.

Jeśli dopiero zaczynasz naukę programowania lub naukę języka JavaScript, miej świadomość, że te książki nie są łagodnym „wprowadzeniem do języka”. Pewne prezentowane zagadnienia są trudne i złożone oraz znacznie wykraczają poza to, czym zwykle zajmują się książki dla początkujących. Jesteś tu mile widziany niezależnie od doświadczenia, ale te książki zostały napisane z myślą o osobach, które opanowały już nieco język JavaScript i korzystają z niego od przynajmniej 6–9 miesięcy.

Mocne i słabe strony

W tej książce celowo stosuję zupełnie inne podejście do języka JavaScript niż w książce The Good Parts2. Nie oznacza to, że koncentruję się na złych stronach, lecz że zajmuję się wszystkimi stronami.

Być może spotkałeś się z opinią lub sam odniosłeś wrażenie, że JavaScript jest wysoce wadliwym językiem, który został źle zaprojektowany i niespójnie zaimplementowany. Niektórzy twierdzą, że jest to najgorszy z najpopularniejszych języków na świecie, że nikt nie programuje w języku JS z wyboru, a jedynie dlatego, że jest zmuszony w związku z jego kluczową pozycją w sieci Web. Takie twierdzenia są niedorzeczne, niezdrowe i lekceważące.

Miliony programistów korzystają z języka JavaScript na co dzień i wielu z nich docenia go i szanuje.

Podobnie jak inne popularne języki programowania ma on pewne mocne strony, jak i pewne niedoskonałości. Nawet sam twórca języka JavaScript Brendan Eich uznał pewne jego aspekty za pomyłki. Ale jest on w błędzie, bo to wcale nie były pomyłki. JavaScript osiągnął swoją obecną pozycję – wszechobecnego i tym samym najbardziej wpływowego języka na świecie – właśnie dzięki wszystkim tym aspektom.

Nie daj się zwieść, że możesz poznać i stosować tylko mały zbiór mocnych stron, unikając wszystkich słabostek. Nie ufaj fałszywym twierdzeniom, że „X to nowy Y” i że jakaś nowa funkcja języka sprawia, że poprzednia funkcja natychmiast staje się przestarzała i jej stosowanie świadczy o ignorancji. Nie słuchaj, gdy ktoś mówi, że twój kod nie jest „nowoczesny”, ponieważ nie używa jeszcze funkcji będącej na etapie „stage 0”, która została zaproponowana zaledwie kilka tygodni temu!

Wszystkie elementy języka JavaScript są przydatne. Choć niektóre są bardziej przydatne niż pozostałe, a niektóre wymagają większej ostrożności i świadomości.

Moim zdaniem nie można być naprawdę wydajnym programistą JavaScript, używając jedynie małego wycinka pełnych możliwości języka. Czy wyobrażasz sobie budowlańca z szerokim zestawem narzędzi, który korzysta jednie z młotka i pogardza śrubokrętem lub taśmą mierzącą? Nie miałoby to żadnego sensu.

Moim zdaniem należy zacząć od nauczenia się wszystkich elementów języka JavaScript oraz używać ich w odpowiednich sytuacjach. I pozwolę sobie zasugerować, że pora pozbyć się wszystkich książek o języku JavaScript, które odradzają takie podejście.

Tytuł?

Dlaczego nadałem serii książek taki tytuł?

Nie próbuję cię obrazić, krytykując twój aktualny brak znajomości lub zrozumienia języka JavaScript. Nie sugeruję, że nie możesz lub nie będziesz chciał się go nauczyć. Nie chełpię się tajemną wiedzą, którą posiadam tylko ja i kilku innych wybrańców.

Poważnie, takie reakcje wzbudził tytuł pierwszej serii książek, zanim ktokolwiek ją jeszcze przeczytał. Jednak są one bezpodstawne.

Tytuł „JS, jakiego jeszcze nie znasz” miał przede wszystkim zasygnalizować, że większość programistów JS nie poświęciło czasu na to, aby dobrze zrozumieć działanie pisanego przez siebie kodu. Wiedzą, że kod działa i przynosi pożądany efekt. Ale nie do końca rozumieją, jak to działa lub, co gorsza, mają pewne wyobrażenie o działaniu kodu, które po dokładniejszej analizie okazuje się słabe.

Stawiam przed tobą subtelne, ale uczciwe wyzwanie, abyś odłożył na bok to, co wiesz o języku JS i spojrzał na niego świeżym okiem i z wzmożoną ciekawością. Abyś podczas pisania każdego wiersza kodu zadawał sobie pytanie dlaczego? Dlaczego kod daje taki wynik? Dlaczego ten sposób jest lepszy niż kilka innych sposobów osiągania tego samego rezultatu? Dlaczego wszyscy „popularni programiści” mówią, że należy stosować X w kodzie, choć okazuje się, że Y mogłoby być lepszym wyborem?

Dodałem „jeszcze” do tytułu, nie tylko dlatego, że jest to drugie wydanie, lecz także dlatego, że chcę, aby stawiane przez te książki wyzwanie budziło nadzieję, zamiast zniechęcać.

Chciałbym jednak wyraźnie podkreślić, że moim zdaniem nie da się całkowicie poznać języka JS. Nie jest to cel, który się osiąga, lecz do którego się dąży. Proces nauki nie dobiega do końca, w którym wiemy już wszystko o JS. Kontynuujemy naukę tak długo, jak długo programujemy w języku JS. A im bardziej zagłębiamy się w ten temat, tym bardziej kwestionujemy to, co wiedzieliśmy wcześniej i uczymy się ponownie, z perspektywy bardziej doświadczonego programisty.

Zachęcam, aby programując w języku JavaScript, a tak naprawdę w jakimkolwiek języku, przyjąć założenie, że nigdy nie uda się go całkowicie opanować, ale można i należy wciąż dążyć do tego celu, mimo iż ta podróż zajmie całą karierę programisty, a nawet dłużej.

Zawsze można lepiej poznać JS. Mam nadzieję, że to właśnie pokazują książki JSJJNZ.

Misja

Tak naprawdę nie trzeba tłumaczyć, dlaczego programiści powinni traktować JavaScript poważnie. Uważam, że udowodnił on swoje miejsce w czołówce najważniejszych języków programistycznych.

Jednak pozostała jeszcze do rozstrzygnięcia inna ważna sprawa i te książki podejmują to wyzwanie.

Szkoliłem ponad 5000 programistów z zespołów i firm na całym świecie, w ponad 25 krajach na sześciu kontynentach. I zauważyłem, że zbyt często liczy się praktycznie tylko wynik programu – nie to, jak jest napisany lub jak/dlaczego działa.

Jak wskazuje moje doświadczenie – zdobyte nie tylko w pracy programisty, lecz także w wyniku szkolenia wielu innych programistów – lepsze zrozumienie, w jaki sposób działa kod, pozwala zawsze osiągnąć większą wydajność w pracy niż samo dążenie do uzyskania pożądanego efektu.

Innymi słowy, kod wystarczająco dobry, by działał, nie jest i nie powinien być wystarczająco dobry.

Wszyscy programiści regularnie walczą z jakimś fragmentem kodu, który z nieznanej im przyczyny nie działa prawidłowo. Jednak programiści JS zbyt często zrzucają winę na język, zamiast przyznać, że problem wynika z braku wiedzy. Te książki pełnią zarówno funkcję pytania, jak i funkcję odpowiedzi: dlaczego stało się to i co zrobić, by stało się tamto.

Książki JSJJNZ mają na celu pomóc każdemu programiście JS we wzięciu pełnej odpowiedzialności za pisany kod, w zrozumieniu go i programowaniu w sposób czytelny oraz świadomy.

Droga

Część z was sięgnęła po tę pozycję z zamiarem przeczytania całej serii sześciu książek, od początku do końca.

Chciałbym jednak zasugerować zmianę planów.

Nie pisałem serii JSJJNZ z myślą o czytaniu wszystkiego naraz. Książki są treściwe, ponieważ JavaScript ma ogromne możliwości, jest zaawansowany i pod pewnymi względami dość skomplikowany. Nikt nie potrafi podczas pierwszego czytania zapisać w mózgu wszystkich przedstawionych informacji. Jest to niewykonalne i nie ma sensu nawet próbować.

Zalecam, aby powoli przejść przez JSJJNZ. Zacznij od przeczytania jednego rozdziału od początku do końca, a później wróć do niego i ponownie przeczytaj pojedyncze podrozdziały. Zrób przerwę między podrozdziałami, aby przećwiczyć kod i pomysły przedstawione w każdym z nich. A gdy zagadnienie jest bardziej złożone, dobrze jest poświęcić kilka dni na jego przyswojenie, ponowne przeczytanie, przećwiczenie i ponowne przemyślenie.

 

Możesz przeznaczyć tydzień lub dwa na każdy rozdział, miesiąc lub dwa na każdą książkę i rok lub więcej na całą serię i nadal nie wydobyć maksimum możliwości z JSJJNZ.

Zamiast urządzać maraton czytelniczy, bądź cierpliwy i rozłóż lekturę książek w czasie. Przerywaj czytanie, aby przećwiczyć praktyczne stosowanie kodu w swojej pracy lub w projekcie, w którym uczestniczysz. Zmierz się z moimi opiniami przedstawionymi w książce, przedyskutuj je z innymi i przede wszystkimi nie zgadzaj się ze mną! Załóż grupę dyskusyjną lub kółko czytelnicze. Zorganizuj mini warsztaty w swojej firmie. Opisz na blogu to, czego się nauczyłeś. Porusz te tematy podczas lokalnego spotkania społeczności JS.

Moim celem nie jest przekonanie cię do swoich poglądów. Chcę jedynie, abyś miał własne opinie i umiał je obronić. Aby to osiągnąć, nie wystarczy przeczytać wszystkie książki z serii. Wymaga to więcej czasu i buduje się powoli w miarę uczenia się, analizowania i wielokrotnego czytania.

Te książki mają być twoim podręcznikiem podczas podróży po świecie JavaScriptu, od aktualnego stanu wiedzy po głębsze jego zrozumienie. A im lepiej zrozumiesz JS, tym więcej pytań będziesz zadawać i więcej będziesz musiał się dowiedzieć! Na tym właśnie polega cała zabawa!

Cieszę się, że wyruszasz w tę podróż i jestem zaszczycony, że rozważasz użycie moich książek jako przewodnika. Czas zacząć poznawanie JS.

Rozdział 1. Czym jest JavaScript?

Nie znasz jeszcze JavaScriptu. Ja też nie… a na pewno nie do końca. Nikt z nas go nie zna, ale możemy zacząć lepiej go poznawać.

W pierwszym rozdziale pierwszej książki z serii JS, jakiego jeszcze nie znasz (JSJJNZ) poświęcimy czas na zbudowanie podstaw, które pomogą nam w dalszej pracy. Musimy zacząć od omówienia istotnych szczegółów organizacyjnych, obalenia pewnych mitów i błędnych założeń dotyczących tego, czym język jest (i czym tak naprawdę nie jest).

W ten sposób zyskamy cenny wgląd w naturę, organizację i rozwój języka JS – wszyscy programiści JS powinni to wiedzieć. Jeśli chcesz poznać JS, jest to dobry początek podróży.