JavaScript

Z Wikipedii, wolnej encyklopedii
JavaScript
Logo języka JavaScript
Logo języka
Pojawienie się

4 grudnia 1995; ponad 28 lat temu[1]

Paradygmat

Język skryptowy wieloparadygmatowy (obiektowy, funkcyjny, imperatywny)

Typowanie

dynamiczne, Duck typing

Implementacje

SpiderMonkey, V8, JavaScriptCore, Chakra, Rhino, Carakan, KJS

Aktualna wersja stabilna

ECMAScript 2021
(czerwiec 2021) [±]

Twórca

Brendan Eich

Platforma sprzętowa

wieloplatformowy

Strona internetowa

JavaScript, w skrócie JSskryptowy oraz wieloparadygmatowy język programowania, stworzony przez firmę Netscape, najczęściej stosowany na stronach internetowych. Twórcą JavaScriptu jest Brendan Eich[2]. W połowie lat 90. XX wieku organizacja ECMA wydała na podstawie JavaScriptu standard języka skryptowego o nazwie ECMAScript, aktualnie rozwijaniem tego standardu zajmuje się komisja TC39[3].

Zastosowanie[edytuj | edytuj kod]

Najczęściej spotykanym zastosowaniem języka JavaScript są strony internetowe. Skrypty te służą najczęściej do zapewnienia interakcji poprzez reagowanie na zdarzenia, 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 postaci node.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 jak XUL, XBL, XPCOM oraz JSLib. 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 nazwie ChatZilla, domyślnie dołączony do pakietu Mozilla. Microsoft udostępnia biblioteki umożliwiające tworzenie aplikacji JScript jako część środowiska Windows Scripting Host. Ponadto JScript.NET jest jednym z podstawowych języków środowiska .NET. Istnieje także stworzone przez IBM środowisko SashXB dla systemu Linux, które umożliwia tworzenie w języku JavaScript aplikacji korzystających z GTK+, GNOME i OpenLDAP. Platforma Node.js umożliwia pisanie aplikacji wiersza poleceń oraz aplikacji serwerowych. Node.js używany jest także w środowisku Electron, który umożliwia pisanie aplikacji GUI. Język JavaScript używany jest także na urządzeniach internetu rzeczy, robotów, czy układów takich jak Arduino poprzez bibliotekę Johnny-Five[5].

Historia[edytuj | edytuj kod]

ECMAScript[edytuj | edytuj kod]

 Osobny artykuł: ECMAScript.

W 1996 r. organizacja ECMA 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ęzyk ActionScript dla platformy Flash.

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 artykule TC39.

Dialekty[edytuj | edytuj kod]

Od czasu powstania JavaScriptu opracowywane były różne jego odmiany interpretowane za pomocą osobnych silników. Oprócz implementacji wprowadzonych do przeglądarek internetowych należy do nich ActionScript aplikacji Adobe Flash oraz UnityScript w silniku Unity (nie jest już on obsługiwany od wersji 2018.2[7]).

Wersje JavaScriptu, odmiany ECMAScriptu opracowywanej przez firmę 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, interfejs DOM poziom pierwszy i drugi M 0.6 3
1.6 listopad 2005 Mechanizm E4X 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
 Osobny artykuł: JScript.
Wersje JScriptu, odmiany ECMAScriptu opracowywanej przez firmę 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), interfejsy XMLHttpRequest oraz DOM 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 ?

Java[edytuj | edytuj kod]

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 handlowego JavaScript jest Oracle Corporation, które przejęło Sun Microsystems w 2010 roku). Skrypty JavaScriptu oraz aplety 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 technologii LiveConnect. Często występują pewne nieporozumienia, lecz JavaScript i Java to mimo wszystko dwa różne języki.

JavaScript dla WWW[edytuj | edytuj kod]

Interakcja[edytuj | edytuj kod]

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 kolekcji document.layers, za to w Internet Explorerze – document.all. Organizacja W3C opracowała jednak jednolity obiektowy model obsługiwany przez wszystkie współczesne przeglądarki (w tym Operę od wersji 6, Konquerora od wersji 3 oraz Safari). Tablice all i layers zostały uznane za przestarzałe i wsparcie dla nich zostało praktycznie wycofane.

Osadzanie[edytuj | edytuj kod]

W języku HTML za umieszczanie skryptów JS odpowiedzialny jest element <script> z opcjonalnymi argumentami type o wartości text/javascript (typ MIME) i language o wartości javascript. 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].
<script type="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ć argumentu language w znaczeniu określenia wersji języka JS (atrybut, jeżeli jest użyty, powinien przyjąć dwuznakowe wartości opisane standardem ISO 639-1 dotyczące języków naturalnych, np. EN, DE, PL).
<script type="text/javascript">
/* <![CDATA[ */
alert(12 > 6);
/* ]]> */
</script>
Zewnętrzne skrypty dodawane są także przy użyciu powyższego znacznika, uwzględniając jedynie parametr src z nazwą pliku zawierającego kod skryptu. Typ MIME dla samodzielnych plików JavaScript to application/javascript lub przestarzały text/javascript[12].
<script type="text/javascript" src="code.js"></script>
Skrypty modułowe, ładujące zależności dynamicznie, muszą być oznaczone przez type="module"[9][10].
<script src="js/main.js" type="module"></script>

Transpilatory[edytuj | edytuj kod]

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 jest Babel.

Zobacz też[edytuj | edytuj kod]

Uwagi[edytuj | edytuj kod]

  1. a b Lub poprzedniej wersji implementacji, jeżeli specyfikacji ECMAScript jeszcze nie wydano.
  2. Wersja ta została wydana, zanim ECMA ukończyła pierwszą specyfikację. Mimo to jest z nią częściowo zgodna.

Przypisy[edytuj | edytuj kod]

  1. Informacja prasowa – „Netscape and Sun announce JavaScript”. (ang.).
  2. Paul Krill: JavaScript founder Brendan Eich: WebAssembly is a game-changer. InfoWorld, 2016-03-10. [dostęp 2016-12-21]. (ang.).
  3. Standard ECMA-262. www.ecma-international.org. [dostęp 2016-12-29].
  4. Ringo.
  5. Johnny-Five: The JavaScript Robotics & IoT Platform.
  6. ES5, ES6, ES2016, ES.Next: What’s going on with JavaScript versioning?. benmccormick.org.
  7. UnityScript’s long ride off into the sunset. [dostęp 2019-05-19]. (ang.).
  8. Wersja 1.1 – Features added after version 1,
  9. a b HTML Standard, html.spec.whatwg.org [dostęp 2021-11-10].
  10. a b The Script element – HTML: HyperText Markup Language, MDN [dostęp 2021-11-10] (ang.).
  11. Osadzanie skryptów w XHTML. [dostęp 2007-05-07]. [zarchiwizowane z tego adresu (2007-04-20)].
  12. B. Hoehrmann, Scripting Media Types, RFC 4329, IETF, kwiecień 2006, DOI10.17487/RFC4329, ISSN 2070-1721, OCLC 943595667 (ang.).

Linki zewnętrzne[edytuj | edytuj kod]