Ciekawostki o JavaScript

programowanie

JavaScript to jednowątkowy, dynamicznie typowany język skryptowy działający w oparciu o pętlę zdarzeń (Event Loop) i model nieblokującego wejścia/wyjścia. Choć pierwotnie powstał jako proste narzędzie do manipulacji drzewem DOM w przeglądarce, współczesne silniki JIT przekształciły go w pełnoprawne środowisko uruchomieniowe dla aplikacji webowych i serwerowych.

16 ciekawostek o JavaScript

  1. 10 dni na stworzenie JS
    W maju 1995 roku Brendan Eich opracował prototyp języka w zaledwie 10 dni dla przeglądarki Netscape Navigator 2.0. Projekt nosił wówczas roboczą nazwę Mocha, którą szybko zmieniono na LiveScript, zanim ostatecznie wybrano JavaScript.
  2. Błąd w operatorze typeof null
    Wywołanie typeof null zwraca wartość „object” z powodu błędu implementacyjnego w pierwszej wersji języka z 1995 roku. Wartości obiektowe miały znacznik typu 0, a stała null była reprezentowana przez wskaźnik zerowy (0x00), co silnik zinterpretował jako obiekt.
  3. Sortowanie liczb w tablicy
    Domyślna metoda Array.prototype.sort() rzutuje wszystkie elementy na ciągi znaków i porównuje je według punktów kodowych UTF-16. W efekcie tablica liczb [1, 10, 2, 21] po posortowaniu bez funkcji komparatora daje kolejność [1, 10, 2, 21], a nie [1, 2, 10, 21].
  4. Kompilator JIT w silniku V8
    Wprowadzony przez Google w 2008 roku silnik V8 wyeliminował tradycyjny interpreter kodu na rzecz kompilacji Just-In-Time bezpośrednio do kodu maszynowego procesora. Nowoczesna architektura silnika korzysta z dwóch kompilatorów: Ignition (generuje bytecode) oraz TurboFan (optymalizuje kod maszynowy).
  5. Geneza standardu ECMAScript
    W listopadzie 1996 roku firma Netscape przekazała specyfikację języka do organizacji normalizacyjnej Ecma International, aby uniknąć przejęcia kontroli nad technologią przez firmę Microsoft. W efekcie oficjalna nazwa standardu to ECMA-262, a pierwsza wersja ECMAScript 1 ujrzała światło dzienne w czerwcu 1997 roku.
  6. Arytmetyka zmiennoprzecinkowa IEEE 754
    Wynik operacji 0.1 + 0.2 wynosi dokładnie 0.30000000000000004 z powodu reprezentacji liczb w 64-bitowym standardzie IEEE 754. Liczby dziesiętne o ułamkach takich jak 0.1 nie mają skończonego rozwinięcia w systemie binarnym, co prowadzi do mikroskopijnych błędów zaokrągleń w pamięci.
  7. Powstanie platformy Node.js
    W 2009 roku Ryan Dahl zaprezentował Node.js na konferencji JSConf EU, łącząc silnik V8 z biblioteką libuv i nieblokującym modelem I/O. Umożliwiło to uruchamianie kodu JavaScript poza przeglądarką bezpośrednio na serwerach linuksowych i windowsowych.
  8. Dwie reprezentacje zera
    Standard IEEE 754 w JavaScripcie rozróżnia +0 i -0 na poziomie bitowym (bit znaku). Choć operator +0 === -0 zwraca wartość true, funkcja Object.is(+0, -0) poprawnie rozróżnia oba zera i zwraca false, co ma znaczenie m.in. przy dzieleniu przez zero (zwraca 1/(+0) = Infinity oraz 1/(-0) = -Infinity).
  9. Limit liczb całkowitych Number.MAX_SAFE_INTEGER
    Maksymalna bezpieczna liczba całkowita reprezentowana bez utraty precyzji w typie Number to 9007199254740991 (czyli 2^53 - 1). Większe liczby całkowite tracą unikalność bitową, dlatego w standardzie ES2020 wprowadzono natywny typ BigInt, obsługujący liczby o dowolnej wielkości.
  10. Wpływ atrybutów async i defer na parser DOM
    Domyślnie znacznik script blokuje parser HTML do momentu pobrania i wykonania pliku, co wydłuża metrykę LCP i TBT. Użycie defer pobiera skrypt asynchronicznie w tle i wykonuje go dopiero po sparsowaniu całego dokumentu DOM, zachowując kolejność plików.
  11. Indeksacja JavaScriptu przez Googlebot
    Googlebot uruchamia proces dwufazowego renderowania, gdzie kod HTML jest indeksowany natychmiast, a skrypty JS trafiają do kolejki Web Rendering Service (WRS) opartej na silniku Chromium. Może to powodować opóźnienie w odczytywaniu treści generowanych po stronie klienta (CSR) od kilku godzin do paru dni.
  12. Wprowadzenie instrukcji use strict
    W specyfikacji ECMAScript 5 (2009) dodano tryb ścisły („use strict”), który uniemożliwia m.in. przypadkowe tworzenie zmiennych globalnych bez deklaracji var/let/const oraz blokuje ciche błędy przy próbie zapisu do właściwości tylko do odczytu.
  13. Porzucenie specyfikacji ECMAScript 4
    Prace nad standardem ECMAScript 4 trwały od 1999 do 2008 roku i zostały całkowicie zarzucone z powodu zbyt radykalnych zmian architektonicznych (m.in. statyczne typy i klasy). Spór między Netscape a firmami Microsoft i Yahoo! doprowadził do kompromisu o nazwie Harmony, z którego powstał ES5 i ES6.
  14. Mechanizm automatycznego wstawiania średników
    Parser JavaScriptu implementuje regułę ASI (Automatic Semicolon Insertion), która automatycznie domyka instrukcje średnikiem w określonych warunkach. Może to prowadzić do błędów - instrukcja „return” z nową linią przed zwracanym obiektem zostanie zinterpretowana jako „return;”, zwracając undefined.
  15. Niemutowalne typy pierwotne i mutowalne obiekty
    W JavaScripcie wszystkie typy prymitywne (string, number, boolean, null, undefined, symbol, bigint) są niemutowalne - żadna metoda nie modyfikuje istniejącej wartości w pamięci, lecz tworzy nową kopię. Tylko typ Object i jego pochodne (tablice, funkcje) podlegają bezpośredniej mutacji.
  16. Przełom roku 2015 i cykl wydań ES6
    Wydany w czerwcu 2015 roku ECMAScript 2015 (ES6) był największą aktualizacją w historii języka, wprowadzającą m.in. obietnice (Promises), moduły import/export, klasy i składnię let/const. Po ES6 komitet TC39 przeszedł na coroczny, przyrostowy cykl publikacji standardu.

JavaScript pytania

Co to jest JavaScript i do czego służy na stronie WWW?

To język programowania, który odpowiada za interaktywność witryny, np. animacje, obsługę formularzy czy dynamiczne doładowywanie treści bez przeładowania karty.

Gdzie wkleić kod JavaScript w strukturze HTML?

Kod wkleja się w pliku HTML wewnątrz znacznika script w sekcji head lub tuż przed zamykającym znacznikiem body.

Czym różni się JavaScript od Javy?

To dwa zupełnie różne języki programowania; JavaScript działa głównie w przeglądarkach internetowych, a Java to język ogólnego przeznaczenia stosowany m.in. w aplikacjach korporacyjnych.

Czym różni się atrybut async od defer w tagu script?

Atrybut async pobiera skrypt w tle i uruchamia go natychmiast po pobraniu, natomiast defer czeka z wykonaniem kodu do pełnego sparsowania dokumentu HTML.

Jak połączyć zewnętrzny plik JS z dokumentem HTML?

Użyj znacznika script z atrybutem src wskazującym ścieżkę do pliku, np. script src="skrypt.js".

Czy JavaScript ma negatywny wpływ na pozycjonowanie SEO?

Nie, o ile roboty Google mogą bez przeszkód wyrenderować stronę, a skrypty nie opóźniają krytycznych wskaźników Core Web Vitals.

Dlaczego skrypty JavaScript blokują renderowanie strony?

Domyślnie przeglądarka wstrzymuje budowanie drzewa DOM na czas pobrania i wykonania kodu, co rozwiązuje przeniesienie skryptu na dół strony lub dodanie defer.

Czym różnią się deklaracje zmiennych var, let i const?

Słowo kluczowe const służy do deklaracji stałych, let tworzy zmienną o zasięgu blokowym, a przestarzałe var ma zasięg funkcyjny i podlega hoistingowi.

Dlaczego robot Google nie indeksuje treści generowanych przez JavaScript?

Dzieje się tak, gdy skrypt zawiera błędy w konsoli, ładuje dane po długim opóźnieniu lub pliki JS są zablokowane w pliku robots.txt.

Jak opóźnić ładowanie ciężkich skryptów JS w WordPressie?

Możesz użyć wtyczek optymalizacyjnych typu WP Rocket albo wpiąć skrypt przez funkcję wp_enqueue_script z parametrem ładowania w stopce.

Jak sprawdzić błędy JavaScript na własnej stronie?

Otwórz narzędzia deweloperskie w przeglądarce klawiszem F12 i przejdź do zakładki Console, gdzie na czerwono wyświetlają się wszystkie błędy wykonania kodu.

Co to jest minifikacja JavaScript i jak wpływa na szybkość strony?

To proces usuwania zbędnych spacji, komentarzy i skracania nazw zmiennych w pliku, co zmniejsza jego wagę i przyspiesza wskaźnik LCP.

Link do artykułu skopiowany
CSS

Ciekawostki o CSS

Poznaj techniczne fakty o historii i mechanizmach działania języka CSS. Sprawdź, jak optymalizacja arkuszy stylów wpływa na renderowanie i wydajność stron.

html

Ciekawostki o HTML

Poznaj techniczne kulisy powstawania języka HTML. Sprawdź, jak ewoluowały tagi, specyfikacje W3C i w jaki sposób kod źródłowy wpływa na pozycjonowanie stron.