JavaScript | |
---|---|
Jazyková třída |
multiparadigma : objektově orientované ( prototypické ), zobecněné , funkční , imperativní , orientované na aspekty , událostmi řízené programování |
Typ provedení | interpretace, překlad do Java bytecode [ 1] , JIT do nativního kódu [2] |
Objevil se v | 1995 |
Autor | Brendan Eich |
Přípona souboru | .js, .cjs, .mjs[Спецификация 1] |
Uvolnění | ECMAScript 2022 [3] (červen 2022 ) |
Typový systém | dynamický , kachna |
Hlavní implementace | SpiderMonkey , Rhino , KJS (JavaScript) , JavaScriptCore , V8 |
Byl ovlivněn | Lua , Self [4] , C , Schéma [4] , Perl [4] , Python , Java [4] , AWK [4] , HyperTalk [4] |
ovlivnil | Objective-J , Dart , TypeScript |
Mediální soubory na Wikimedia Commons |
JavaScript | |
---|---|
Rozšíření | .js[7] |
MIME typ | text/javascript, aplikace/javascript [5] [6] |
zveřejněno | září 1995 [8] |
Typ formátu | textový soubor se zdrojovým kódem |
Rozšířeno z | ECMAScript |
Mediální soubory na Wikimedia Commons |
JavaScript ( / ˈ dʒ ɑː v ɑː ˌ s k r ɪ p t / ; zkr. JS /ˈdʒeɪ.ɛs./ ) je multiparadigmatický programovací jazyk . Podporuje objektově orientované , imperativní a funkční styly. Jedná se o implementaci specifikace ECMAScript (standard ECMA-262 [9] ).
JavaScript se běžně používá jako vložitelný jazyk pro programový přístup k objektům aplikace . Nejvíce se používá v prohlížečích jako skriptovací jazyk pro vytváření interaktivních webových stránek [10] .
Hlavní architektonické rysy: dynamické psaní , slabé psaní , automatická správa paměti , prototypové programování , funguje jako prvotřídní objekty .
JavaScript byl ovlivněn mnoha jazyky a cílem bylo přiblížit jazyk Javě. JavaScript nevlastní žádná společnost ani organizace, což jej odlišuje od řady programovacích jazyků používaných při vývoji webu [~ 1] [11] .
Název "JavaScript" je ochranná známka společnosti Oracle Corporation registrovaná v USA [12] .
V roce 1992 začala společnost Nombas ( následně získaná Openwave ) vyvíjet vložitelný skriptovací jazyk Cmm (C-minus-minus), který měl být podle vývojářů dostatečně výkonný, aby nahradil makra , při zachování podobnosti s C , aby se to vývojáři snadno naučili [13] . Hlavním rozdílem oproti C byla manipulace s pamětí. V novém jazyce byla veškerá správa paměti prováděna automaticky: nebylo třeba vytvářet buffery , deklarovat proměnné a provádět konverzi typů. V ostatních ohledech si byly jazyky velmi podobné: zejména Cmm podporoval standardní funkce a operátory C [14] . Cmm byl přejmenován na ScriptEase , protože původní název zněl příliš negativně a zmínka o C v něm lidi „děsila“ [13] [15] . Na základě tohoto jazyka byl vytvořen proprietární produkt CEnvi . Na konci listopadu 1995 Nombas vyvinul verzi CEnvi , která je zabudována do webových stránek. Stránky, které bylo možné upravit pomocí skriptovacího jazyka, se nazývaly Espresso Pages , které demonstrovaly použití skriptovacího jazyka k vytvoření hry, ověření uživatelského vstupu ve formulářích a vytvoření animací. Espresso Pages bylo umístěno jako ukázka , aby pomohla představit si, co by se stalo, kdyby byl do prohlížeče implementován jazyk Cmm . Fungovaly pouze v 16bitovém Netscape Navigatoru pod Windows [16] .
Úplně první implementaci JavaScriptu vytvořil Brendan Eich ve společnosti Netscape a od té doby byla aktualizována, aby vyhovovala ECMA-262 Edition 5 a novějším. Tento engine se nazývá SpiderMonkey a je implementován v C/ C++ . Engine Rhino byl vytvořen Norrisem Boydem a implementován v Javě. Stejně jako SpiderMonkey i Rhino vyhovuje ECMA-262 Edition 5.
Brendan Eich , najatý Netscape 4. dubna 1995 [18] , měl za úkol přinést programovací jazyk Scheme nebo něco podobného do prohlížeče Netscape. Protože požadavky byly nejasné, Eich byl přesunut do skupiny Server Products, kde strávil měsíc prací na vylepšení protokolu HTTP [18] . V květnu byl vývojář převeden zpět do týmu na straně klienta (prohlížeče), kde okamžitě začal vyvíjet koncept nového programovacího jazyka. Vedení vývoje prohlížeče, včetně Toma Paquina , Michaela Toye , Ricka Schella , bylo přesvědčeno, že Netscape by měl podporovat programovací jazyk vložený do HTML kódu stránky [ 19 ] .
Kromě Brendana Eicha se na vývoji podíleli [18 ] spoluzakladatel Netscape Communications [20] Mark Andressen a spoluzakladatel Sun Microsystems Bill Joy : abychom měli čas dokončit práci na jazyku pro vydání prohlížeče , společnosti uzavřely smlouvu o rozvojové spolupráci [21] . Dali si za cíl poskytnout „jazyk pro lepení“ součástí webového zdroje: obrázky, zásuvné moduly, Java applety, který by byl vhodný pro webové designéry a programátory, kteří nemají vysokou kvalifikaci [18] .
Jazyk se původně jmenoval Mocha [23] [24] [25] na návrh Marka Andreessena [22] , implementoval jej Brendan Eich během deseti dnů a poprvé byl zařazen do pre-alfa verze Netscape 2 [22] . Poté byl přejmenován na LiveScript [25] [26] a byl určen jak pro programování na straně klienta, tak pro programování na straně serveru (kde se měl nazývat LiveWire) [21] . Syntaxe byla ovlivněna jazyky C a Java , a protože Java byla v té době módním slovem [18] [21] , byl LiveScript 4. prosince 1995 přejmenován na JavaScript [ 27] , licencovaný společností Sun. Oznámení JavaScriptu zástupci Netscape a Sunu proběhlo v předvečer vydání druhé beta verze Netscape Navigatoru [18] . Prohlašuje, že 28 předních IT společností vyjádřilo svůj záměr používat JavaScript jako otevřený standardní objektový skriptovací jazyk ve svých budoucích produktech [28] .
V roce 1996 společnost Microsoft vydala analog jazyka JavaScript s názvem JScript . Tento jazyk byl oznámen 18. července 1996 [29] . První prohlížeč podporující tuto implementaci byl Internet Explorer 3.0.
Z iniciativy Netscape [30] [31] byl jazyk standardizován asociací ECMA . Standardizovaná verze se nazývá ECMAScript a je popsána standardem ECMA-262 . První verze specifikace odpovídala JavaScriptu verze 1.1 a také jazykům JScript a ScriptEasy [13] [21] .
V knize The World 's Most Misunderstood Programming Language Has Become the World's Most Popular Programming Language [ 32] Douglas Crockford tvrdí , že vedoucí pozici převzal JavaScript díky vývoji AJAX , když se prohlížeč stal převládajícím systémem pro poskytování aplikací. Poznamenává také rostoucí popularitu JavaScriptu, skutečnost, že tento jazyk je zabudován do aplikací, zdůrazňuje význam jazyka.
Podle indexu TIOBE , založeného na Google , MSN , Yahoo! , Wikipedia a YouTube , v dubnu 2015 byl JavaScript na 6. místě (před rokem - na 9.) [33] .
Podle Black Duck Software [34] je používání JavaScriptu na vzestupu ve vývoji softwaru s otevřeným zdrojovým kódem . 36 % projektů vydaných mezi srpnem 2008 a srpnem 2009 zahrnuje JavaScript, nejběžněji používaný programovací jazyk s rychle rostoucí popularitou. 80 % softwaru s otevřeným zdrojovým kódem používá C, C++, Java, Shell a JavaScript. JavaScript je však jediný z těchto jazyků, jehož podíl používání vzrostl (více než 2 procenta, pokud počítáte na řádky kódu) [35] .
JavaScript je nejoblíbenější programovací jazyk používaný k vývoji webových aplikací na straně klienta [36] [37] .
JavaScript je objektově orientovaný jazyk, ale prototypování použité v jazyce [38] [39] způsobuje rozdíly v práci s objekty oproti tradičním třídně orientovaným jazykům. Kromě toho má JavaScript řadu vlastností vlastních funkčním jazykům – funguje jako prvotřídní objekty, objekty jako seznamy, currying , anonymní funkce , uzávěry [40] – což dává jazyku další flexibilitu.
Navzdory podobné syntaxi jako C má JavaScript ve srovnání s jazykem C zásadní rozdíly :
Jazyk postrádá takové užitečné věci [41] jako:
Syntaxe JavaScriptu je hodně podobná syntaxi C a Javy , ale sémanticky je jazyk mnohem blíže Self , Smalltalk nebo dokonce Lisp [32] [42] [Specifikace 2] .
V JavaScriptu:
Strukturálně může být JavaScript reprezentován jako spojení tří odlišných částí [43] [44] [45] [46] :
Při zvažování JavaScriptu v prostředí bez prohlížeče nemusí být podporován objektový model prohlížeče a objektový model dokumentu [45] .
Objektový model dokumentu je někdy považován za samostatnou entitu od JavaScriptu [47] [48] [Specifikace 3] , což je v souladu s definicí DOM jako jazykově nezávislého rozhraní dokumentu [49] [~ 3] . Naproti tomu řada autorů shledává BOM a DOM jako úzce související [50] [51] .
JádroECMAScript není jazyk prohlížeče a nedefinuje vstupní a výstupní metody [43] . Je to spíše základ pro vytváření skriptovacích jazyků. Specifikace ECMAScript popisuje datové typy, instrukce, klíčová slova, vyhrazená slova, operátory , objekty, regulární výrazy , aniž by omezovala autory odvozených jazyků v jejich rozšiřování o nové komponenty.
Objektový model prohlížečeObjektový model prohlížeče je část jazyka specifická pro prohlížeč [45] [52] , která je vrstvou mezi jádrem a objektovým modelem dokumentu [53] . Primárním účelem objektového modelu prohlížeče je správa oken prohlížeče a interakce s nimi. Každé z oken prohlížeče je reprezentováno objektem window, centrálním objektem DOM. Objektový model prohlížeče není v současné době standardizován [45] [54] , ale specifikace je ve vývoji WHATWG [53] [Spec 4] a W3C [44] [Spec 5] .
Kromě správy oken v rámci objektového modelu prohlížeče prohlížeče obvykle poskytují podporu pro následující entity [53] [54] :
Document Object Model je aplikační programovací rozhraní pro HTML a XML dokumenty [55] . Podle DOM může být dokument (například webová stránka) reprezentován jako strom objektů, které mají řadu vlastností, které s ním umožňují provádět různé manipulace:
Chcete-li přidat kód JavaScript na stránku, můžete použít značky <script></script>[Specification 6] , které se doporučují, ale nejsou povinné, umístěné uvnitř <head>. V jednom dokumentu může být libovolný počet kontejnerů <script>. Atribut type="text/javascript"je volitelný, tato hodnota se používá standardně [56] .
Skript, který zobrazuje modální okno s klasickým nápisem "Hello, World!" uvnitř prohlížeče:
< script type = "application/javascript" > alert ( 'Ahoj, světe!' ); </ skript >
Specifikace HTML popisuje sadu atributů používaných k definování obsluhy událostí [Specifikace 7] . Příklad použití:
< a href = "delete.php" onclick = "confirm('Jste si jistý?'); return false;" > Vymazat </a> _ _Ve výše uvedeném příkladu při kliknutí na odkaz funkce confirm('Вы уверены?');vyvolá modální okno s nápisem „Jste si jistý?“, ale return false;zablokuje přechod na odkaz. Tento kód bude samozřejmě fungovat pouze v případě, že prohlížeč má povolenou podporu JavaScriptu, jinak bude odkaz bez varování následován.
Používání kódu JavaScript v kontextu označení stránky je považováno za špatný postup v nenápadném JavaScriptu . Analogové (za předpokladu, že je odkaz opatřen identifikátorem alertLink)
<a id="alertLink"> _ _ _ _ Vymazat </a> _ _Výše uvedeným příkladem může být například následující fragment kódu JavaScript:
okno . onload = () => { const linkWithAlert = document . getElementById ( 'alertLink' ); linkWithAlert . addEventListener ( 'click' , async () => { if ( potvrdit ( 'Jste si jistý?' )) { wait fetch ( 'delete' , { method : 'DELETE' }) } }) }; Přesunutí do samostatného souboruExistuje třetí způsob, jak propojit JavaScript - napsat skript do samostatného souboru a poté jej připojit pomocí konstrukce
< body > < script type = "application/javascript" src = "http://Path_to_coscript_file" > </ script > </ body > Atributy prvku skriptuPrvek skriptu, který se běžně používá k připojení ke stránce JavaScript, má několik atributů.
Pracovní návrh RFC-4329 definující [57] typ MIME vyhovující JavaScriptu uvádí :
typy médií
které jsou také definovány v tomto dokumentu, jsou určeny pro praktické použití a měly by být preferovány.
Původní text (anglicky)[ zobrazitskrýt] Použití typu „text“ na nejvyšší úrovni pro tento druh obsahu je známé jako problematické. Tento dokument je tedy definuje text/javascripta text/ecmascriptoznačuje jako „zastaralé“. Nedoporučuje se používat experimentální a neregistrované typy médií, jak je uvedeno v části výše.typy médií,
Zároveň je language="JavaScript"atribut language ( ) i přes jeho aktivní používání (v roce 2008 byl tento atribut nejčastěji používaným atributem pro tag <script>[58] ) zastaralý, není v DTD , a proto je považován za nesprávný [ 59] .
JavaScript se používá na klientské straně webových aplikací: programy klient-server, ve kterých je prohlížeč klientem a webový server je server, mající logiku distribuovanou mezi serverem a klientem. Výměna informací ve webových aplikacích probíhá po síti. Jednou z výhod tohoto přístupu je skutečnost, že klienti jsou nezávislí na konkrétním operačním systému uživatele, takže webové aplikace jsou multiplatformní služby.
AJAXJavaScript se používá v AJAX , oblíbeném přístupu k vytváření interaktivních uživatelských rozhraní pro webové aplikace, který zahrnuje asynchronní komunikaci mezi prohlížečem a webovým serverem na „pozadí“. Výsledkem je, že při aktualizaci dat se webová stránka zcela nenačte a rozhraní webové aplikace je rychlejší, než by tomu bylo u tradičního přístupu (bez použití AJAXu).
KometaKometa je široký pojem, který popisuje, jak webové aplikace fungují pomocí trvalých připojení HTTP, což umožňuje webovému serveru odesílat data do prohlížeče bez jakéhokoli dalšího požadavku z prohlížeče. Tyto aplikace využívají technologie přímo podporované prohlížeči. Zejména hojně využívají JavaScript.
Operační systémy prohlížečůJavaScript je široce používán v operačních systémech prohlížečů . Takže například zdrojový kód IndraDesktop WebOS je 75 % JavaScript, kód operačního systému prohlížeče IntOS je 70 %. Podíl JavaScriptu ve zdrojovém kódu eyeOS je 5 %, nicméně i v rámci tohoto operačního systému hraje JavaScript významnou roli, podílí se na vykreslování na klientovi a je nezbytným mechanismem pro komunikaci mezi klientem a serverem [60 ] .
JavaScript se používá k vytváření malých programů, které jsou v prohlížeči uloženy do záložek. To používá adresy URL se specifikátorem javascript:[61] .
Uživatelské skripty prohlížeče jsou programy JavaScript, které se spouštějí v prohlížeči uživatele při načítání stránky. Umožňují automaticky vyplňovat formuláře, přeformátovat stránky, skrývat nežádoucí obsah a vkládat obsah, který chcete zobrazit, měnit chování klientské strany webových aplikací, přidávat na stránku ovládací prvky a tak dále.
Mozilla Firefox používá ke správě uživatelských skriptů rozšíření Greasemonkey ; Opera [62] [63] [64] a Google Chrome [65] poskytují podporu pro uživatelské skripty a možnost spouštět řadu skriptů Greasemonkey.
Aplikace napsané v JavaScriptu mohou běžet na serverech se systémem Java 6 a novějším [66] . Tato okolnost se používá k vytváření serverových aplikací, které umožňují zpracování JavaScriptu na straně serveru.
Kromě Javy 6 existuje řada platforem, které používají existující JavaScriptové enginy (interprety) ke spouštění serverových aplikací. (Zpravidla mluvíme o opětovném použití dříve vytvořených enginů pro spouštění kódu JavaScript ve WWW prohlížečích.)
název | Použitý JavaScript engine | Jazyky, ve kterých jsou napsány engine a platforma | Licence |
---|---|---|---|
Jaxer [67] | Spider Monkey [68] | C++, C | GPL 3 [69] |
rámec pro vytrvalost [70] | nosorožec | Jáva | Upravená licence BSD [71] |
Helma [72] | nosorožec | Java, JavaScript | Licence Helma 2.0 podobná BSD [73] |
v8cgi | V8 | C++, JavaScript | Licence BSD [74] |
node.js | V8 | C++ | licence MIT [75] |
gopherjs | Jít | Jít | BSD licence |
JavaScript na straně serveru se používá v projektech Google [76] . Například Weby Google umožňují přizpůsobení pomocí skriptů JavaScript spouštěných enginem Rhino [77] .
Přechod mobilních zařízení Palm na používání Palm webOS jako operačního systému s Mojo SDK jako vývojovou sadou [78] umožňuje použití JavaScriptu jako jazyka pro vývoj mobilních aplikací [79] [80] .
Widget je pomocný miniprogram, jehož grafický modul je umístěn v pracovní ploše odpovídajícího nadřazeného programu , který slouží k ozdobení pracovní plochy, zábavě, řešení jednotlivých pracovních úkolů nebo rychlému získávání informací z internetu bez pomocí webového prohlížeče. JavaScript se používá jak k implementaci widgetů, tak k implementaci modulů widgetů. Konkrétně Apple Dashboard , Microsoft Gadgets , Yahoo! Widgety , Google Gadgets , Klipfolio Dashboard .
JavaScript se používá k psaní aplikačního softwaru . Například 16,4 % zdrojového kódu Mozilla Firefox je napsáno v JavaScriptu.
Google Chrome OS používá webové aplikace jako aplikační software [81] .
Desktopové prostředí GNOME má schopnost vytvářet JavaScriptové programy, které pracují s knihovnami GNOME pomocí Gjs , Seed [82] .
JavaScript také nachází využití jako skriptovací jazyk pro přístup k aplikačním objektům. Platforma Mozilla ( XUL / Gecko ) používá JavaScript. Mezi produkty třetích stran například Java od verze 6 obsahuje vestavěný interpret JavaScriptu založený na Rhinu [66] . Skriptování JavaScriptu je podporováno v aplikacích Adobe, jako je Adobe Photoshop , Adobe Dreamweaver , Adobe Illustrator a Adobe InDesign .
JavaScript se používá v kancelářských aplikacích k automatizaci rutinních akcí, psaní maker a organizaci přístupu z webových služeb.
Microsoft OfficeExcel Services 2010 přidal [83] dvě nová rozhraní pro programování aplikací: REST API a JavaScript Object Model ( JSOM ).
JavaScript je jedním z programovacích jazyků používaných pro psaní maker v aplikacích, které jsou součástí OpenOffice.org [85] . OpenOffice.org integruje interpret Rhino JavaScript [86] . Od prosince 2009 byla podpora JavaScriptu omezená. Omezení spojená s [86] vývojem maker OpenOffice.org v JavaScriptu:
OpenOffice.org má JavaScript editor a debugger [87] .
JavaScript má propedeutickou hodnotu, umožňuje kombinaci intenzivní programátorské praxe a šíře technologií používaných ve výuce informatiky [88] . Výuka tohoto jazyka ve škole vám umožňuje vytvořit základ pro výuku webového programování , využívat kreativní projekty ve třídě [89] . Odpovídající kurz umožňuje poskytnout hloubkovou úroveň studia informatiky a má smysl jej zařadit do volitelných předmětů hloubkové úrovně školení [90] .
JavaScript je vhodný jazyk pro výuku programování her . Ve srovnání s alternativami je funkčně dostačující, snadno se učí a používá, snižuje složitost pro učení, motivuje studenty ke sdílení svých her s ostatními [91] .
Části o implementaci klasických algoritmů , technik, datových struktur v JavaScriptu, které nejsou zahrnuty v knize Nicholase Zakase „Professional JavaScript for Web Developers“ , sloužily [92] jako začátek projektu Computer science in JavaScript [~ 4] .
JavaScript | Odpovídající verze JScript | Významné změny |
---|---|---|
1.0 ( Netscape 2.0, březen 1996) | 1.0 (starší verze IE 3.0, srpen 1996) | Původní verze jazyka JavaScript. |
1.1 (Netscape 3.0, srpen 1996) | 2.0 (pozdější verze IE 3.0, leden 1997) | V této verzi byl objekt implementován Arraya byly opraveny nejzávažnější chyby. |
1.2 (Netscape 4.0, červen 1997) | Implementovaný přepínač switch, regulární výrazy. Prakticky uvedeno v souladu s prvním vydáním specifikace ECMA-262. | |
1.3 (Netscape 4.5, říjen 1998) | 3.0 (IE 4.0, říjen 1997) | Kompatibilní s prvním vydáním ECMA-262. |
1.4 (pouze server Netscape) | 4.0 ( Visual Studio 6, žádná verze IE) | Platí pouze pro serverové produkty Netscape. |
5.0 (IE 5.0, březen 1999) | ||
5.1 (IE 5.01) | ||
1.5 (Netscape 6.0, listopad 2000; také novější verze Netscape a Mozilla ) |
5.5 (IE 5.5, červenec 2000) | Revize 3 (prosinec 1999). Kompatibilní se třetím vydáním specifikace ECMA-262. |
5.6 (IE 6.0, říjen 2001) | ||
1.6 ( Gecko 1.8, Firefox 1.5, listopad 2005) | Revize 3 s některými kompatibilními vylepšeními: E4X , dodatky k Array(např. Array.prototype.forEach), zjednodušení pro Arraya String[93] | |
1.7 (Gecko 1.8.1, Firefox 2.0, podzim 2006), rozšíření JavaScript 1.6 | Revize 3, přidává všechna vylepšení z JavaScriptu 1.6, generátory a pochopení seznamů z Pythonu , rozsahy bloků používající a destrukční přiřazení ( ) [ 94] . [a*a for (a in iter)]letvar [a, b] = [1, 2] | |
JScript .NET ( ASP.NET ; žádná verze IE) | (Předpokládá se, že JScript .NET byl vyvinut s příspěvky ostatních členů ECMA ) | |
1.8 (Gecko 1.9, Firefox 3.0, podzim 2008), rozšíření JavaScript 1.7 | Nová notace pro funkce podobné typickým lambda výrazům , generátory , nové metody pro iterativní zpracování polí reduce()a reduceRight()[95] . | |
1.8.1 (Gecko 1.9.1, Firefox 3.5) | Nativní podpora JSON, metoda getPrototypeOf()y , Objectmetody trim(), trimLeft(), trimRight()y String[96] | |
2,0 | Revize 4 (probíhající práce [97] , název rezervován ECMA, ale není použit pro publikaci [Specifikace 9] ) | |
Revize 5 (dříve známá jako ECMAScript 3.1 [97] . Dokončeno 3. prosince 2009 [98] [99] .) |
Pro zajištění vysoké úrovně abstrakce a dosažení přijatelného stupně kompatibility mezi prohlížeči se při vývoji webových aplikací používají knihovny JavaScript. Jedná se o soubor opakovaně použitelných objektů a funkcí. Mezi významné JavaScriptové knihovny patří React.js , Vue.js , Ember.js , Adobe Spry , AngularJS , Svelte , Dojo , , jQuery , Mootools , Prototype , Qooxdoo a Underscore .
V JavaScriptu se přístup k debuggerům stává zvláště užitečným při vývoji velkých netriviálních programů kvůli rozdílům v implementacích mezi prohlížeči (zejména s ohledem na Document Object Model ). Mnoho prohlížečů má vestavěný debugger.
Internet Explorer má tři debuggery: Microsoft Visual Studio je nejúplnější, následuje Microsoft Script Editor (součást Microsoft Office [100] ) a konečně bezplatný Microsoft Script Debugger, mnohem jednodušší než ostatní dva. Bezplatný Microsoft Visual Web Developer Express poskytuje omezenou verzi s funkcí ladění JavaScriptu v Microsoft Visual Studio. V osmé verzi IE se spolu s nástroji pro vývojáře objevil i vestavěný debugger.
Opera má také svůj vlastní debugger Opera Dragonfly [101] .
Webové aplikace, které vyvíjíte ve Firefoxu , lze ladit pomocí vestavěných nástrojů Firefox Developer Tools.
Safari obsahuje ladicí program JavaScript WebKit Web Inspector [102] . Stejný debugger je k dispozici také v jiných prohlížečích používajících WebKit : Google Chrome, Arora , Rekonq , Midori atd.
Většina automatizovaných testovacích rámců pro kód JavaScript vyžaduje, abyste spouštěli testy v prohlížeči. To se provádí pomocí HTML stránky, která je testovacím kontextem , který zase načte vše potřebné k provedení testu. Prvními takovými frameworky byly JsUnit (vytvořeno v roce 2001), Selenium (vytvořeno v roce 2004) [103] . Alternativou je spouštění testů z příkazového řádku. V tomto případě se používají prostředí bez prohlížeče, jako je Rhino [104] . Jedním z prvních nástrojů tohoto druhu je Crosscheck, který umožňuje testovat kód emulací chování Internet Exploreru 6 a Firefoxu verze 1.0 a 1.5 [105] . Dalším příkladem automatizovaného testovacího rámce pro kód JavaScript, který ke spouštění testů nepoužívá prohlížeč, je knihovna env.js vytvořená Johnem Resigem. Využívá Rhino a obsahuje emulaci prostředí prohlížeče a DOM [106] .
Blue Ridge, plugin pro webovou aplikační framework Ruby on Rails , vám umožňuje testovat kód JavaScriptu v prohlížeči i mimo něj. Toho je dosaženo použitím automatizovaného testovacího rámce Screw.Unit a Rhina s env.js [107] .
Hlavním problémem systémů testování bez prohlížeče je to, že používají spíše emulace než skutečná prostředí, ve kterých se kód spouští. To vede k tomu, že úspěšné absolvování testů nezaručuje, že kód bude v prohlížeči správně fungovat [108] [109] . Problémem testování systémů, které používají prohlížeč, je složitost práce s nimi, nutnost provádět rutinní neautomatizované akce [110] . K vyřešení tohoto problému používá JsTestDriver, automatizovaný testovací rámec vyvinutý společností Google, server, který komunikuje s prohlížeči k provádění testování [111] . Selenium Remote Control, součást automatizovaného testovacího rámce Selenium, se chová podobně: obsahuje server, který spouští a zastavuje prohlížeče a funguje jako HTTP proxy pro požadavky na ně [112] . Selenium navíc obsahuje Selenium Grid, který umožňuje simultánně testovat JavaScript kód na různých počítačích s různými prostředími, čímž se zkracuje doba provádění testu [113] . Testswarm je distribuovaná podpora nepřetržité integrace , kterou podporují automatizované testovací rámce JavaScriptu QUnit ( knihovna jQuery ), UnitTestJS ( knihovna prototypů ), JSSpec ( knihovna MooTools ), JsUnit, Selenium a Dojo Objective Harness JavaScript [114] .
Negativní vlastností, kterou může mít framework pro testování kódu JavaScript, je přítomnost závislostí. To vytváří riziko, že testovaný kód, který testy projde, selže v prostředí, které tyto závislosti nemá. Například původní verze JsUnitTest, frameworku vytvořeného a používaného k testování knihovny Prototype, závisela na samotném Prototype při změně vlastností objektů v globálním rozsahu [115] . Zahrnutí testovacího nástroje do JavaScriptové knihovny je běžnou praxí. YUI Test 3 je tedy součástí Yahoo! UI Library a lze jej bezpečně použít k testování libovolného kódu JavaScript [116] . QUnit je automatizovaný testovací rámec vytvořený vývojáři jQuery [117] .
Standardizace JavaScriptu vyžadovala, aby se předešlo problémům s ochrannými známkami, proto norma ECMA 262 nazývá jazyk ECMAScript, jehož tři revize byly zveřejněny od zahájení prací na něm v listopadu 1996.
Objective-J je přísná, kompaktní nadmnožina JavaScriptu, která k JavaScriptu přidává:
Microsoft VBScript , stejně jako JavaScript, může být spuštěn na straně klienta na webových stránkách. VBScript má syntaxi odvozenou z jazyka Visual Basic a je podporován pouze v aplikaci Internet Explorer .
JSON neboli JavaScript Object Notation je obecný formát pro výměnu dat definovaný jako podmnožina JavaScriptu.
Scheme je také sesterským jazykem JavaScriptu, protože oba poskytují bohaté funkční programovací funkce: JavaScript je dynamický jazyk, podporuje flexibilní pole, může snadno simulovat s-výrazy a má podporu pro výrazy lambda [118] .
JavaScript a JavaBěžná mylná představa je, že JavaScript je podobný nebo úzce příbuzný Javě , není [32] . Oba jazyky mají syntaxi podobnou C, jsou objektově orientované a mají tendenci být široce používány ve webových aplikacích na straně klienta. Mezi důležité rozdíly patří:
JavaScript implementuje interprety řady programovacích jazyků, což umožňuje použít webový prohlížeč jako runtime pro ně. Lze je využít například pro vzdělávací účely [119] .
HotRuby je bezplatná implementace virtuálního stroje Ruby v JavaScriptu a Flashi . Umožňuje spouštět bajtkód vyplývající z kompilace YARV . Implementuje většinu gramatiky Ruby. Mechanismus výjimek a většina vestavěných funkcí a tříd ještě nebyla implementována [120] . S HotRuby můžete používat rubínové skripty na webových stránkách. Za tímto účelem by měl být rubínový kód umístěn do bloku:
< script type = "text/ruby" > ... </ script >HotRuby jej rozbalí, odešle do vzdáleného skriptu ke kompilaci a poté zobrazí výsledky na stránce [121] . Tato implementace umožňuje přístup z Ruby k objektům JavaScriptu [122] .
Jazyk | Název implementace | Hlavní autoři | Licence |
---|---|---|---|
JavaScript | s-mr [123] | Andrej Formiga | NewBSD |
dovětek | WPS [124] | Tom Hlavatý | ? |
Assembler pro MOS Technology 6502 | 6502asm [125] | Stian Soreng | GPL |
Cíl-J | Cappuccino [126] | Ross Boucher | LGPL |
Haskell | ycr2js [127] | Tom Shackell, Neil Mitchell, Andrew Wilkinson, Mike Dodds, Bob Davie, Dimitry Golubovsky | jednoduchá permisivní licence |
Prolog | Monash Toy Prolog [128] | Lloyd Allison | ? |
ioctls [129] | Jan Grant | ? | |
kočka | Kočičí tlumočník [130] | Christopher Diggins | veřejná doména |
Systém | BiwaScheme [131] | Yutaka Hara | MIT |
ZÁKLADNÍ | Zcela ZÁKLADNÍ [132] | Nikko Strom | svobodný proprietární |
Lily | Lily [133] | Bill Orcutt | MIT |
Forth | wForth [134] | K. Jacobson | ? |
PHP | phype [135] | ||
Python 3 | PyPy.js | ? | ? |
Oberon 07 | oberonjs [136] | Vlad Folts | MIT |
Některé programovací jazyky poskytují podporu pro interakci s kódem JavaScript.
Podporu JavaScriptu k dnešnímu dni zajišťují moderní verze všech nejpoužívanějších prohlížečů. Internet Explorer , Opera , Mozilla Firefox , Safari , Google Chrome mají plnou podporu pro 3. vydání ECMA-262. Ve stejné době se Mozilla Firefox pokusil implementovat podporu pro čtvrté vydání specifikace a prvním prohlížečem, ve kterém se objevila neúplná podpora specifikace 3.1, byl Internet Explorer 8 [140] .
Chyby, kterých se při implementaci specifikace dopustili vývojáři populárních prohlížečů, jsou obvykle drobné [141] . Od listopadu 2009 má objektový model dokumentu omezenější podporu [142] .
Podle tvůrce jazyka může podpora Microsoftu v Internet Exploreru jednoho z rychlých JavaScriptových motorů , který existuje a je používán v jiných prohlížečích , vést ke vzniku aplikací, které pracují s trojrozměrnou grafikou , 3D hry napsané v JavaScriptu, použití JavaScriptu v úlohách, které dříve využívaly technologii Adobe Flash [143] .
Regresní testování shody prohlížeče se třetím vydáním specifikace ECMA-262 lze provést [144] [145] pomocí Google vyvinutého nástroje pro testování shody se specifikací ECMAScript Sputnik , který zahrnuje více než pět tisíc testů case [146] a byl pojmenován po ruském týmu Google [146] , stejně jako shell sputniktests-webrunner [147] napsaný Yuri Zaitsevem nebo služba Google [148] . Testovací případy zahrnuté ve Sputniku jsou aktualizovány v souvislosti s vydáním pátého vydání specifikace ECMA-262, odrážející změny oproti předchozímu vydání [149] .
ECMAScript 5 Conformance Suite [150] je testovací sada vydaná společností Microsoft pod licencí BSD [151] k ověření, že implementace jazyka ECMAScript odpovídá specifikaci jeho pátého vydání. Ke 12. březnu 2010 bylo v balíčku 1236 testovacích případů, měl verzi 0.2 alfa a počet stažení za tři měsíce byl 178 [152] .
Pro testování správnosti implementací JavaScriptu je k dispozici testovací sada JavaScript [153] [154] od Mozilly .
JavaScript umožňuje potenciálním autorům škodlivého kódu spustit jej na libovolném počítači v síti pouhým otevřením webové stránky na něm. To má za následek dvě zásadní omezení:
Kromě toho prodejci prohlížečů zavádějí další omezení v reakci na zneužívání, ke kterému dochází. Tak se objevil zejména zákaz otevření okna, jehož velikost jedné strany je menší než sto pixelů [155] .
Zranitelnosti napříč webyČastým problémem týkajícím se JavaScriptu je cross-site scripting neboli XSS, což je porušení pravidla omezení domény. Chyby zabezpečení XSS se vyskytují v situacích, kdy má útočník možnost umístit skript na stránku, která se zobrazí uživateli. V tomto případě skript získá přístup na stránku s právy tohoto uživatele, což v některých případech otevírá možnost odesílání důvěrných informací a provádění nechtěných transakcí .
Zranitelnosti XSS se také vyskytují kvůli chybám vývojářů prohlížečů [157] .
Dalším typem zranitelnosti mezi weby je padělání požadavků mezi weby neboli CSRF. Spočívá ve schopnosti stránky útočníka donutit prohlížeč uživatele k provedení nežádoucí akce na cílové stránce (například bankovní převod peněz). To je možné, pokud cílový web spoléhá pouze na soubory cookie HTTP nebo požadavky na autorizaci. V tomto případě jsou požadavky iniciované kódem webu útočníka provedeny stejným způsobem jako požadavky uživatele, pokud je na cílovém webu autorizován . Jedním z prostředků ochrany před CSRF je provedení autentizace na jakýkoli požadavek, který vede k nevratným důsledkům. Pomoci může také analýza HTTP refereru .
Chybně umístěná důvěryhodnost na straně klientaVývojáři klientských aplikací, ať už používají JavaScript nebo ne, si musí být vědomi toho, že ten může být pod kontrolou útočníků. Proto lze obejít jakoukoli kontrolu na straně klienta, JavaScript může být spuštěn nebo ne. Zatemněný kód lze zpětně upravit ; data formuláře lze odeslat na server bez ověření JavaScriptem ; skripty lze částečně zakázat, takže například nelze implementovat spolehlivou ochranu před ukládáním obrázků pomocí JavaScriptu [158] ; je krajně neprozíravé vkládat heslo do JavaScriptu spuštěného na klientovi, kde ho může útočník najít.
Chyby v prohlížeči, pluginech a rozšířeníchJavaScript poskytuje rozhraní pro širokou škálu funkcí prohlížeče, z nichž některé mohou obsahovat chyby, jako je přetečení vyrovnávací paměti . To vám umožňuje psát skripty, které způsobí, že se v systému uživatele spustí libovolný kód.
Podobné chyby byly nalezeny v běžně používaných prohlížečích, včetně Mozilla Firefox [159] , Internet Explorer [160] , Safari [161] . Při identifikaci potenciálně nebezpečných chyb v prohlížeči a získání informací o implementovaných exploitech doporučují výrobce a bezpečnostní experti před vydáním opravy JavaScript zakázat [162] [163] .
Zásuvné moduly , jako jsou přehrávače , Macromedia Flash a řada komponent ActiveX dostupných ve výchozím nastavení v Internet Exploreru, mohou také obsahovat chyby zneužité pomocí JavaScriptu, jak se to stalo dříve [164] [165] .
Rozšíření Mozilla Firefox nejsou vzájemně izolovaná: jedno rozšíření může opravit druhé, čehož mohou útočníci zneužít. Na SecurityByte & Owasp AppSec Asia 2009 Roberto Suggi Liverani a Nick Freeman předvedli tři exploity v populárních rozšířeních Firefoxu, stažených z webu více než 30 milionůkrát [166] .
Chyby implementace sandboxuProhlížeče mohou spouštět JavaScript mimo sandbox s oprávněními potřebnými například k vytváření a odstraňování souborů. Taková oprávnění by však neměla být udělena kódu z webu.
Nesprávná oprávnění pro JavaScript z webu byla příčinou zranitelnosti v Internet Exploreru [167] i Mozilla Firefox [168] .
Microsoft Windows umožňuje souborům JavaScript běžet jako běžné programy, aniž by byly v karanténě. To umožňuje vytvářet trojské koně [169] .
JavaScript | |
---|---|
Nápady | |
Kompilátory | |
Motory | |
Knihovny a rámce | |
redaktoři | |
Nástroje |
|
Související technologie | |
Lidé | |
Kategorie |
ECMAScript | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Dialekty |
| ||||||||||||
Motory ( srovnání ) |
| ||||||||||||
Rámce , knihovny |
| ||||||||||||
Lidé | |||||||||||||
jiný |
|
Programovací jazyky | |
---|---|
|
Web a webové stránky | |
---|---|
globálně | |
Lokálně | |
Typy stránek a služeb |
|
Tvorba a údržba | |
Typy rozložení, stránek, webů | |
Technický | |
Marketing | |
Společnost a kultura |