JavaScript, w skrócieJS –skryptowy orazwieloparadygmatowyjęzyk programowania, stworzony przez firmęNetscape, najczęściej stosowany nastronach internetowych. Twórcą JavaScriptu jestBrendan Eich[2]. W połowie lat 90. XX wieku organizacjaECMA wydała na podstawie JavaScriptu standard języka skryptowego o nazwieECMAScript, aktualnie rozwijaniem tego standardu zajmuje siękomisja TC39[3].
Najczęściej spotykanym zastosowaniem języka JavaScript są strony internetowe. Skrypty te służą najczęściej do zapewnienia interakcji poprzez reagowanie nazdarzenia, walidacji danych wprowadzanych w formularzach lub tworzenia złożonych efektów wizualnych. Skrypty JavaScriptu uruchamiane przez strony internetowe mają znacznie ograniczony dostęp do komputera użytkownika. Po stronie serwera JavaScript może działać w postacinode.js lub Ringo[4].
W języku JavaScript można także pisać pełnoprawne aplikacje.Fundacja Mozilla udostępnia środowisko złożone z technologii takich jakXUL,XBL,XPCOM orazJSLib. Umożliwiają one tworzenie korzystających z zasobów systemowych aplikacji o graficznym interfejsie użytkownika dopasowującym się do danej platformy. Przykładem aplikacji napisanych z użyciem JS i XUL może byćklient IRC o nazwieChatZilla, domyślnie dołączony do pakietu Mozilla. Microsoft udostępnia biblioteki umożliwiające tworzenie aplikacjiJScript jako część środowiskaWindows Scripting Host. Ponadto JScript.NET jest jednym z podstawowych językówśrodowiska .NET. Istnieje także stworzone przezIBM środowisko SashXB dla systemuLinux, które umożliwia tworzenie w języku JavaScript aplikacji korzystających zGTK+,GNOME iOpenLDAP. PlatformaNode.js umożliwia pisanie aplikacjiwiersza poleceń orazaplikacji serwerowych. Node.js używany jest także w środowiskuElectron, który umożliwia pisanie aplikacjiGUI. Język JavaScript używany jest także na urządzeniachinternetu rzeczy,robotów, czy układów takich jakArduino poprzez bibliotekęJohnny-Five[5].
W 1996 r. organizacjaECMA rozpoczęła pracę nad specyfikacją języka JavaScript pozbawioną odniesień do środowiska interpretującego kod. Język opisany w standardzie ECMA-262 został nazwany ECMAScript. Od tego momentu nazwa JavaScript oznacza jedynie jeden z nadzbiorów języka ECMAScript. Pierwsza wersja standardu była bliska JavaScriptowi w wersji 1.1. Trzecia jako pierwsza rozszerzyła istniejące implementacje. Wersja ES4 została całkowicie porzucona przez przeglądarki internetowe, korzystał z niej jedynie językActionScript dla platformyFlash.
Od 2015 roku znacząco zmienił się proces tworzenia i wydawania nowych wersji ECMAScript. Po wersji ES5 wydanej w 2009 pojawiała się wersja ES6 wydana w 2015 roku, a następna już w 2016 (ES7, a właściwie ES2016). Zmieniło się również oficjalne nazewnictwo – wersja początkowo nazywana ES6 to teraz ES2015, potem jest ES2016, ES2017 itd[6].
Proces dodawania nowych funkcji do standardu opisującego JavaScript jest opisany w artykuleTC39.
Od czasu powstania JavaScriptu opracowywane były różne jego odmiany interpretowane za pomocą osobnych silników. Opróczimplementacji wprowadzonych do przeglądarek internetowych należy do nichActionScript aplikacjiAdobe Flash oraz UnityScript w silnikuUnity (nie jest już on obsługiwany od wersji 2018.2[7]).
Wersje JavaScriptu, odmiany ECMAScriptu opracowywanej przezfirmę Netscape.| Wersja | Wydana | Okoliczności wydania | Ważniejsze rozszerzenia implementowanej specyfikacji[a][8] |  przeg. |  spec. |
|---|
| 1.0 | marzec 1996 | | NN 2.0 | brak |
|---|
| 1.1 | sierpień 1996 | | Klasy typów podstawowych,konstruktory,prototypy | NN 3.0 | brak |
|---|
| 1.2 | czerwiec 1997 | | Klasa zdarzenia | NN 4.0 | brak[b] |
|---|
| 1.3 | październik 1998 | | | NN 4.06 | 2 |
|---|
| 1.4 | ? | Dostępna jedynie po stronie serwera (np.Netscape Enterprise Server). | | 2 |
|---|
| 1.5 | listopad 2000 | | Stałe, interfejsDOM poziom pierwszy i drugi | M 0.6 | 3 |
|---|
| 1.6 | listopad 2005 | | MechanizmE4X | Fx 1.5 | 3 |
|---|
| 1.7 | październik 2006 | | Funkcje-iteratory, wielokrotne przypisania | Fx 2.0 | 3 |
|---|
| 1.8 | czerwiec 2008 | | domknięcia wyrażeń, wyrażenia generujące | Fx 3.0 | 3 |
|---|
Wersje JScriptu, odmiany ECMAScriptu opracowywanej przezfirmę Microsoft.| Wersja | Wydana | Okoliczności wydania | Ważniejsze rozszerzenia implementowanej specyfikacji[a] |  przeg. |  spec. |  ≈ JS |
|---|
| 1.0 | sierpień 1996 | | IE 3.0 | brak | 1.0 |
|---|
| 2.0 | styczeń 1997 | | | IE 3.02 | brak | 1.1 |
|---|
| 3.0 | październik 1997 | | | IE 4.0 | 1 | 1.3 |
|---|
| 4.0 | ? | Visual Studio 6.0 | | 1 | 1.4 |
|---|
| 5.0 | marzec 1999 | | Częściowa implementacja trzeciej wersji standardu (bez mechanizmu wyjątków), interfejsyXMLHttpRequest orazDOM poziom pierwszy i drugi | IE 5.0 | 2 | 1.5 |
|---|
| 5.1 | sierpień 2000 | | | IE 5.01 | 2 |
|---|
| 5.5 | sierpień 2000 | | | IE 5.5 | 3 |
|---|
| 5.6 | październik 2001 | | | IE 6.0 | 3 |
|---|
| 5.7 | listopad 2006 | | | IE 7.0 | 3 |
|---|
| .NET | 11 lipca 2000 | Microsoft na bazie wstępnej wersji specyfikacji ECMAScript 4 stworzyłJScript.NET. | | 4 | ? |
|---|
Początkowo Netscape nazwała nowy język LiveScript. Nazwa została jednak szybko zmieniona na JavaScript wskutek biznesowych porozumień pomiędzy Netscape a firmąSun Microsystems (współwłaścicielem znaku handlowegoJavaScript jestOracle Corporation, które przejęło Sun Microsystems w 2010 roku). Skrypty JavaScriptu orazaplety Javy (mimo odrębności tych dwóch języków) mogą się wzajemnie komunikować dzięki dostępnej w przeglądarkach Netscape, Mozilla i Opera technologiiLiveConnect. Często występują pewne nieporozumienia, lecz JavaScript i Java to mimo wszystko dwa różne języki.
Wszystkie implementacje JavaScriptu dostępne w przeglądarkach internetowych dostarczają obiektów reprezentujących drzewo dokumentu. Mogą także umożliwiaćtworzenie ciasteczek, manipulowanie oknami przeglądarki, wyświetlanie prostych okien dialogowych, pobieranie informacji o przeglądarce, zarządzanie jej pluginami oraz arkuszami stylów. Reagują także na zdarzenia wywoływane w interfejsie.
Podczas manipulowania zawartością dokumentu problem stanowił brak jego ustandaryzowanego modelu. W czwartym pokoleniu przeglądarek dostęp do niektórych elementów dokumentu w Netscape możliwy był przy użyciu kolekcjidocument.layers, za to w Internet Explorerze –document.all. OrganizacjaW3C opracowała jednak jednolityobiektowy model obsługiwany przez wszystkie współczesne przeglądarki (w tymOperę od wersji 6,Konquerora od wersji 3 orazSafari). Tabliceall ilayers zostały uznane za przestarzałe i wsparcie dla nich zostało praktycznie wycofane.
W języku HTML za umieszczanie skryptów JS odpowiedzialny jest element<script> z opcjonalnymi argumentamitype o wartościtext/javascript (typ MIME) ilanguage o wartościjavascript. Atrybuty były używane gdy inne języki skryptowe były używane. Od HTML5 nie są potrzebne, choć typ MIME może być podany[9][10]. | <scripttype="text/javascript"language="JavaScript 1.5">alert(12>6);</script><!-- współczesna składnia --><script>alert(12>6);</script> |
Jeżeli kod znajduje się w dokumencie XHTML, w celu uniknięcia zinterpretowania niektórych operatorów jako elementów składni języka należy otoczyć skrypt sekcją CDATA lub zapisać je w postaci encji[11]. W XHTML nie można używać argumentulanguage w znaczeniu określenia wersji języka JS (atrybut, jeżeli jest użyty, powinien przyjąć dwuznakowe wartości opisane standardemISO 639-1 dotyczącejęzyków naturalnych, np. EN, DE, PL). | <scripttype="text/javascript">/* <![CDATA[ */alert(12>6);/* ]]> */</script> |
Zewnętrzne skrypty dodawane są także przy użyciu powyższego znacznika, uwzględniając jedynie parametrsrc z nazwą pliku zawierającego kod skryptu.Typ MIME dla samodzielnych plików JavaScript toapplication/javascript lub przestarzałytext/javascript[12]. | <scripttype="text/javascript"src="code.js"></script> |
Skrypty modułowe, ładujące zależności dynamicznie, muszą być oznaczone przeztype="module"[9][10]. | <scriptsrc="js/main.js"type="module"></script> |
Przeglądarki oraz język JavaScript stały się platformą do obsługi innych języków. Istniejątranspilatory, które konwertują pliki innego języka na JavaScript. Z najbardziej znanych można wymienić:
Istnieją także transpilatory nowszej wersji języka, na wersje starsze, które będą obsługiwane przez większą liczbę przeglądarek. Dzięki temu można korzystać z nowości, dodanych do języka, zanim zostaną dodane przez przeglądarki. Przykładem takiego narzędzia jestBabel.
- ↑abLub poprzedniej wersji implementacji, jeżeli specyfikacji ECMAScript jeszcze nie wydano.
- ↑Wersja ta została wydana, zanim ECMA ukończyła pierwszą specyfikację. Mimo to jest z nią częściowo zgodna.
- ↑Informacja prasowa – „Netscape and Sun announce JavaScript”. (ang.).
- ↑Paul Krill: JavaScript founder Brendan Eich: WebAssembly is a game-changer. InfoWorld, 2016-03-10. [dostęp 2016-12-21]. (ang.).
- ↑Standard ECMA-262. www.ecma-international.org. [dostęp 2016-12-29].
- ↑Ringo.
- ↑Johnny-Five: The JavaScript Robotics & IoT Platform.
- ↑ES5, ES6, ES2016, ES.Next: What’s going on with JavaScript versioning?. benmccormick.org.
- ↑UnityScript’s long ride off into the sunset. [dostęp 2019-05-19]. (ang.).
- ↑Wersja 1.1 –Features added after version 1,
- ↑abHTML Standard [online], html.spec.whatwg.org [dostęp 2021-11-10] .
- ↑abThe Script element – HTML: HyperText Markup Language [online], MDN [dostęp 2021-11-10] (ang.).
- ↑Osadzanie skryptów w XHTML. [dostęp 2007-05-07]. [zarchiwizowane ztego adresu (2007-04-20)].
- ↑B.B. Hoehrmann B.B.,Scripting Media Types,RFC 4329,IETF, kwiecień 2006,DOI: 10.17487/RFC4329,ISSN2070-1721,OCLC 943595667 (ang.).