JavaScript | |
---|---|
Språkklass |
multiparadigm : objektorienterad ( prototypisk ), generaliserad , funktionell , imperativ , aspektorienterad , händelsestyrd programmering |
Utförandetyp | tolkning, översättning till Java bytecode [ 1] , JIT till inbyggd kod [2] |
Framträdde i | 1995 |
Författare | Brendan Eich |
Filtillägg _ | .js, .cjs, .mjs[Спецификация 1] |
Släpp | ECMAScript 2022 [3] (juni 2022 ) |
Typ system | dynamisk , anka |
Stora implementeringar | SpiderMonkey , Rhino , KJS (JavaScript) , JavaScriptCore , V8 |
Blivit påverkad | Lua , Själv [4] , C , Schema [4] , Perl [4] , Python , Java [4] , AWK [4] , HyperTalk [4] |
påverkas | Objective-J , Dart , TypeScript |
Mediafiler på Wikimedia Commons |
JavaScript | |
---|---|
Förlängning | .js[7] |
MIME -typ | text/javascript, applikation/javascript [5] [6] |
publiceras | september 1995 [8] |
Formattyp | textfil med källkod |
Utökad från | ECMAScript |
Mediafiler på Wikimedia Commons |
JavaScript ( / ˈ dʒ ɑː v ɑː ˌ s k r ɪ p t / ; förkortning JS /ˈdʒeɪ.ɛs./ ) är ett multiparadigm programmeringsspråk . Stöder objektorienterade , imperativa och funktionella stilar. Det är en implementering av ECMAScript - specifikationen (ECMA-262 [9] standard ).
JavaScript används vanligtvis som ett inbäddningsbart språk för programmatisk åtkomst till applikationsobjekt . Det används mest i webbläsare som ett skriptspråk för att göra webbsidor interaktiva [10] .
Huvudsakliga arkitektoniska egenskaper: dynamisk typning , svag typning , automatisk minneshantering , prototypprogrammering , fungerar som förstklassiga objekt .
JavaScript har påverkats av många språk, och målet var att göra språket likt Java. JavaScript ägs inte av något företag eller någon organisation, vilket skiljer det från ett antal programmeringsspråk som används i webbutveckling [~ 1] [11] .
Namnet "JavaScript" är ett registrerat varumärke i USA som tillhör Oracle Corporation [12] .
1992 började Nombas ( sedan förvärvad av Openwave ) utveckla ett inbäddningsbart skriptspråk Cmm (C-minus-minus), som enligt utvecklarna skulle vara tillräckligt kraftfullt för att ersätta makron , samtidigt som likheten med C bibehölls , så att utvecklare lätt kan lära sig det [13] . Den största skillnaden mot C var minneshantering. I det nya språket utfördes all minneshantering automatiskt: det fanns inget behov av att skapa buffertar , deklarera variabler och utföra typkonvertering. I andra avseenden var språken väldigt lika varandra: i synnerhet stödde Cmm standardfunktioner och C-operatorer [14] . Cmm bytte namn till ScriptEase eftersom det ursprungliga namnet lät för negativt, och omnämnandet av C i det "skrämde" människor [13] [15] . Baserat på detta språk skapades den egenutvecklade produkten CEnvi . I slutet av november 1995 utvecklade Nombas en version av CEnvi som är inbäddad i webbsidor. Sidorna som kunde modifieras med hjälp av skriptspråket kallades Espresso Pages , som visade användningen av skriptspråket för att skapa ett spel, validera användarinmatning i formulär och skapa animationer. Espresso Pages placerades som en demo för att hjälpa dig att föreställa dig vad som skulle hända om Cmm- språket implementerades i webbläsaren . De fungerade bara i 16-bitars Netscape Navigator under Windows [16] .
Den allra första JavaScript-implementeringen skapades av Brendan Eich på Netscape och har sedan dess uppdaterats för att följa ECMA-262 Edition 5 och senare. Denna motor kallas SpiderMonkey och är implementerad i C/ C++ . Rhino-motorn skapades av Norris Boyd och implementerades i Java. Precis som SpiderMonkey uppfyller Rhino ECMA-262 Edition 5.
Brendan Eich , anställd av Netscape den 4 april 1995 [18] , fick i uppdrag att föra in programmeringsspråket Scheme , eller något liknande, i Netscape-webbläsaren. Eftersom kraven var suddiga flyttades Eich till Server Products-gruppen, där han tillbringade en månad med att förbättra HTTP-protokollet [18] . I maj överfördes utvecklaren tillbaka till klientsidan (webbläsaren), där han omedelbart började utveckla konceptet med ett nytt programmeringsspråk. Webbläsarutvecklingsledning, inklusive Tom Paquin , Michael Toy , Rick Schell , var övertygade om att Netscape borde stödja ett programmeringsspråk inbäddat i sidans HTML-kod [ 19 ] .
Förutom Brendan Eich deltog [18 ] Netscape Communications medgrundare [20] Mark Andressen och Sun Microsystems medgrundare Bill Joy i utvecklingen : för att hinna slutföra arbetet med språket för lanseringen av webbläsaren , ingick företagen ett avtal om utvecklingssamarbete [21] . De satte sig själva som mål att tillhandahålla ett "språk för att limma" de beståndsdelar av en webbresurs: bilder, plugin-program, Java-appletar, vilket skulle vara praktiskt för webbdesigners och programmerare som inte har höga kvalifikationer [18] .
Språket hette ursprungligen Mocha [23] [24] [25] på förslag av Mark Andreessen [22] , implementerades av Brendan Eich inom tio dagar och ingick först i pre-alfaversionen av Netscape 2 [22] . Sedan döptes det om till LiveScript [25] [26] och var avsett för både klient- och server-programmering (där det skulle kallas LiveWire) [21] . Syntaxen påverkades av C- och Java-språken , och eftersom Java var ett modeord vid den tiden [18] [21] döptes LiveScript om till JavaScript [27] den 4 december 1995 , licensierat från Sun. JavaScript-meddelandet av Netscape och Suns representanter ägde rum strax före lanseringen av den andra betaversionen av Netscape Navigator [18] . Den förklarar att 28 ledande IT-företag har uttryckt sin avsikt att använda JavaScript som ett skriptspråk för öppet standardobjekt i sina framtida produkter [28] .
1996 släppte Microsoft en analog av JavaScript-språket som heter JScript . Detta språk tillkännagavs den 18 juli 1996 [29] . Den första webbläsaren som stödde denna implementering var Internet Explorer 3.0.
På initiativ av Netscape [30] [31] standardiserades språket av ECMA- förbundet . Den standardiserade versionen kallas ECMAScript och beskrivs av standarden ECMA-262 . Den första versionen av specifikationen motsvarade JavaScript version 1.1, samt språken JScript och ScriptEasy [13] [21] .
I Världens mest missförstådda programmeringsspråk har blivit världens mest populära programmeringsspråk [ 32] hävdar Douglas Crockford att den ledande positionen JavaScript har tagit över på grund av utvecklingen av AJAX eftersom webbläsaren har blivit det vanligaste applikationsleveranssystemet. Han noterar också den växande populariteten för JavaScript, det faktum att detta språk är inbäddat i applikationer, betonar vikten av språket.
Enligt TIOBE Index , baserat på Google , MSN , Yahoo! , Wikipedia och YouTube , i april 2015 var JavaScript på 6:e plats (för ett år sedan - på 9:e plats) [33] .
Enligt Black Duck Software [34] har användningen av JavaScript varit på uppgång i utvecklingen av programvara med öppen källkod . 36 % av projekten som släpptes mellan augusti 2008 och augusti 2009 involverar JavaScript, det vanligaste programmeringsspråket med snabbt växande popularitet. 80 % av programvaran med öppen källkod använder C, C++, Java, Shell och JavaScript. JavaScript är dock det enda av dessa språk vars andel av användningen har ökat (mer än 2 procent, om man räknar i kodrader) [35] .
JavaScript är det mest populära programmeringsspråket som används för att utveckla webbapplikationer på klientsidan [36] [37] .
JavaScript är ett objektorienterat språk, men prototyperna som används i språket [38] [39] orsakar skillnader i arbetet med objekt jämfört med traditionella klassorienterade språk. Dessutom har JavaScript ett antal egenskaper som är inneboende i funktionella språk - fungerar som förstklassiga objekt, objekt som listor, currying , anonyma funktioner , stängningar [40] - vilket ger språket ytterligare flexibilitet.
Trots liknande syntax som C har JavaScript grundläggande skillnader jämfört med C-språket :
Språket saknar sådana användbara saker [41] som:
Syntaxen för JavaScript är mycket lik den för C och Java , men semantiskt är språket mycket närmare Self , Smalltalk eller till och med Lisp [32] [42] [Specifikation 2] .
I JavaScript:
Strukturellt kan JavaScript representeras som en förening av tre distinkta delar [43] [44] [45] [46] :
När man överväger JavaScript i miljöer som inte är webbläsare, kanske inte webbläsarobjektmodellen och dokumentobjektmodellen stöds [45] .
Dokumentobjektmodellen ses ibland som en separat enhet från JavaScript [47] [48] [Specifikation 3] , vilket överensstämmer med definitionen av DOM som ett språkoberoende dokumentgränssnitt [49] [~ 3] . Däremot finner ett antal författare att BOM och DOM är nära besläktade [50] [51] .
KärnaECMAScript är inte ett webbläsarspråk och definierar inte in- och utdatametoder [43] . Det är snarare grunden för att bygga skriptspråk. ECMAScript-specifikationen beskriver datatyper, instruktioner, nyckelord, reserverade ord, operatorer , objekt, reguljära uttryck , utan att begränsa författare till härledda språk från att utöka dem med nya komponenter.
WebbläsarobjektmodellWebbläsarobjektmodellen är en webbläsarspecifik del av språket [45] [52] som är ett lager mellan kärnan och dokumentobjektmodellen [53] . Det primära syftet med webbläsarobjektmodellen är att hantera och interagera med webbläsarfönster. Vart och ett av webbläsarfönstren representeras av ett objekt window, det centrala DOM-objektet. Webbläsarobjektmodellen är för närvarande inte standardiserad [45] [54] , men en specifikation är under utveckling av WHATWG [53] [Spec 4] och W3C [44] [Spec 5] .
Förutom att hantera fönster, inom webbläsarobjektmodellen, tillhandahåller webbläsare vanligtvis stöd för följande enheter [53] [54] :
Document Object Model är ett applikationsprogrammeringsgränssnitt för HTML- och XML - dokument [55] . Enligt DOM kan ett dokument (till exempel en webbsida) representeras som ett träd av objekt som har ett antal egenskaper som gör att du kan utföra olika manipulationer med det:
För att lägga till JavaScript-kod på en sida kan du använda <script></script>[Specification 6] -taggar , som rekommenderas, men inte krävs, placerade inuti <head>. Det kan finnas hur många behållare som helst <script>i ett dokument. Attributet type="text/javascript"är valfritt, detta värde används som standard [56] .
Ett manus som visar ett modalt fönster med den klassiska inskriptionen "Hello, World!" inuti webbläsaren:
< script type = "application/javascript" > alert ( 'Hej världen!' ); </ script >
HTML-specifikationen beskriver en uppsättning attribut som används för att definiera händelsehanterare [Specifikation 7] . Användningsexempel:
< a href = "delete.php" onclick = "confirm('Är du säker?'); return false;" > Radera </a> _ _I exemplet ovan, när du klickar på länken, confirm('Вы уверены?');kallar funktionen fram ett modalt fönster med inskriptionen "Är du säker?", men return false;blockerar övergången till länken. Naturligtvis kommer denna kod bara att fungera om webbläsaren har och JavaScript-stöd aktiverat, annars kommer länken att följas utan förvarning.
Att använda JavaScript-kod i samband med siduppmärkning anses vara dålig praxis inom diskret JavaScript . Analog (förutsatt att länken är försedd med en identifierare alertLink)
<a id="alertLink"> _ _ _ _ Radera </a> _ _Exemplet ovan kan till exempel vara följande JavaScript-kodavsnitt:
fönster . onload = () => { const linkWithAlert = dokument . getElementById ( 'alertLink' ); linkWithAlert . addEventListener ( 'click' , async () => { if ( confirm ( 'Är du säker?' )) { await fetch ( 'delete' , { method : 'DELETE' }) } }) }; Flytta till en separat filDet finns ett tredje sätt att koppla JavaScript - skriv ett skript i en separat fil och anslut sedan det med hjälp av konstruktionen
< body > < script type = "application/javascript" src = "http://Path_to_coscript_file" > </ script > </ body > Attribut för skriptelementetSkriptelementet, som ofta används för att ansluta till en JavaScript-sida, har flera attribut.
RFC- 4329 - arbetsförslaget som definierar [57] en MIME-typ som överensstämmer med JavaScript säger :
mediatyper
som också definieras i detta dokument är avsedda för praktisk användning och bör föredras.
Originaltext (engelska)[ visaDölj] Användning av "text"-typ på toppnivå för denna typ av innehåll är känt för att vara problematisk. Detta dokument definierar alltså text/javascriptoch text/ecmascriptmarkerar dem som "föråldrade". Användning av experimentella och oregistrerade mediatyper, som anges i en del ovan, avråds.mediatyperna,
Samtidigt är language ( language="JavaScript") attributet, trots dess aktiva användning (2008 var detta attribut det mest använda attributet för <script>[58] taggen ), utfasad, finns inte i DTD och anses därför vara felaktig [ 59] .
JavaScript används på klientsidan av webbapplikationer: klient-serverprogram där webbläsaren är klienten och webbservern är servern, med logik fördelad mellan servern och klienten. Utbytet av information i webbapplikationer sker över nätverket. En fördel med detta tillvägagångssätt är det faktum att klienter är oberoende av användarens specifika operativsystem, så webbapplikationer är plattformsoberoende tjänster.
AJAXJavaScript används i AJAX , ett populärt tillvägagångssätt för att bygga interaktiva användargränssnitt för webbapplikationer som involverar en asynkron "bakgrundskommunikation" mellan webbläsaren och webbservern. Som ett resultat, när du uppdaterar data, laddas webbsidan inte helt om och webbapplikationens gränssnitt blir snabbare än det skulle vara med den traditionella metoden (utan att använda AJAX).
KometComet är ett brett begrepp som beskriver hur webbapplikationer fungerar med beständiga HTTP-anslutningar, vilket gör att en webbserver kan skicka data till en webbläsare utan ytterligare begäran från webbläsaren. Dessa applikationer använder teknik som direkt stöds av webbläsare. I synnerhet använder de i stor utsträckning JavaScript.
Webbläsarens operativsystemJavaScript används ofta i webbläsaroperativsystem . Så till exempel är IndraDesktop WebOS- källkoden 75 % JavaScript, koden för IntOS- webbläsarens operativsystem är 70 %. Andelen JavaScript i källkoden för eyeOS är 5 %, men även inom detta operativsystem spelar JavaScript en viktig roll, deltar i renderingen på klienten och är en nödvändig mekanism för att kommunicera mellan klienten och servern [60 ] .
JavaScript används för att skapa små program som är bokmärkta i webbläsaren. Detta använder webbadresser med javascript:[61] specifikationen .
Webbläsaranvändarskript är JavaScript-program som körs i användarens webbläsare när en sida laddas. De låter dig automatiskt fylla i formulär, formatera om sidor, dölja oönskat innehåll och bädda in innehåll som du vill visa, ändra beteendet på klientsidan av webbapplikationer, lägga till kontroller på sidan och så vidare.
Mozilla Firefox använder tillägget Greasemonkey för att hantera användarskript ; Opera [62] [63] [64] och Google Chrome [65] ger stöd för användarskript och möjligheten att köra ett antal Greasemonkey-skript.
Applikationer skrivna i JavaScript kan köras på servrar som kör Java 6 och senare [66] . Denna omständighet används för att bygga serverapplikationer som gör att JavaScript kan bearbetas på serversidan.
Förutom Java 6 finns det ett antal plattformar som använder befintliga JavaScript-motorer (tolkar) för att köra serverapplikationer. (Som regel talar vi om att återanvända motorer som tidigare skapats för att exekvera JavaScript-kod i webbläsare.)
Javascript Server Application Execution Frameworksnamn | JavaScript-motor används | Språk som motorn och plattformen är skrivna på | Licens |
---|---|---|---|
Jaxer [67] | Spindelapa [68] | C++, C | GPL 3 [69] |
uthållig ram [70] | noshörning | Java | Ändrad BSD-licens [71] |
Helma [72] | noshörning | Java, JavaScript | BSD-liknande Helma License 2.0 [73] |
v8cgi | V8 | C++, JavaScript | BSD-licens [74] |
node.js | V8 | C++ | MIT-licens [75] |
gopherjs | gå | gå | BSD-licens |
JavaScript på serversidan används i Google -projekt [76] . Till exempel tillåter Google Sites anpassning med JavaScript-skript som körs av Rhino-motorn [77] .
Övergången av Palms mobila enheter till att använda Palm webOS som operativsystem med Mojo SDK som ett utvecklingspaket [78] gör att JavaScript kan användas som ett utvecklingsspråk för mobila applikationer [79] [80] .
En widget är ett extra miniprogram, vars grafiska modul är placerad i arbetsytan för motsvarande överordnade program , som tjänar till att dekorera arbetsytan, underhålla, lösa enskilda arbetsuppgifter eller snabbt få information från Internet utan med en webbläsare. JavaScript används både för att implementera widgets och för att implementera widgetmotorer. I synnerhet Apple Dashboard , Microsoft Gadgets , Yahoo! Widgets , Google Gadgets , Klipfolio Dashboard .
JavaScript används för att skriva applikationsprogram . Till exempel är 16,4 % av Mozilla Firefox källkod skriven i JavaScript.
Google Chrome OS använder webbapplikationer som applikationsprogram [81] .
GNOME -skrivbordsmiljön har förmågan att skapa JavaScript-program som fungerar på GNOME-biblioteken med hjälp av Gjs , Seed [82] .
JavaScript kan också användas som ett skriptspråk för åtkomst till applikationsobjekt. Mozilla-plattformen ( XUL / Gecko ) använder JavaScript. Bland tredjepartsprodukter har Java till exempel inkluderat en inbyggd Rhino - baserad JavaScript-tolk sedan version 6 [66] . JavaScript-skript stöds i Adobe-program som Adobe Photoshop , Adobe Dreamweaver , Adobe Illustrator och Adobe InDesign .
JavaScript används i kontorsapplikationer för att automatisera rutinåtgärder, skriva makron och organisera åtkomst från webbtjänster.
Microsoft OfficeExcel Services 2010 lade till [83] två nya applikationsprogrammeringsgränssnitt: REST API och JavaScript Object Model ( JSOM ).
JavaScript är ett av de programmeringsspråk som används för att skriva makron i applikationer som är en del av OpenOffice.org [85] . OpenOffice.org integrerar Rhino JavaScript-tolken [86] . Från och med december 2009 var JavaScript-stödet begränsat. Begränsningar som är inneboende i [86] utveckling av OpenOffice.org-makron i JavaScript:
OpenOffice.org har en JavaScript-redigerare och debugger [87] .
JavaScript har propedeutiskt värde, vilket möjliggör en kombination av intensiv programmeringsövning och bredden av teknologier som används vid undervisning i datavetenskap [88] . Genom att lära ut detta språk i skolan kan du skapa en bas för att lära dig webbprogrammering , använda kreativa projekt i klassrummet [89] . Motsvarande kurs låter dig ge en fördjupad studienivå av datavetenskap och det är vettigt att inkludera den i valbara kurser med en fördjupad utbildningsnivå [90] .
JavaScript är ett lämpligt språk för att lära sig spelprogrammering . Jämfört med alternativ är det funktionellt tillräckligt, lätt att lära sig och använda, minskar komplexiteten för lärande, motiverar elever att dela sina spel med andra [91] .
Delar om implementering i JavaScript av klassiska algoritmer , tekniker, datastrukturer , som inte ingår i boken av Nicholas Zakas "Professional JavaScript for Web Developers" , fungerade [92] som början på Datavetenskap i JavaScript- projektet [~ 4] .
JavaScript | Motsvarande JScript-version | Betydande förändringar |
---|---|---|
1.0 ( Netscape 2.0, mars 1996) | 1.0 (Tidiga versioner av IE 3.0, augusti 1996) | Den ursprungliga versionen av JavaScript-språket. |
1.1 (Netscape 3.0, augusti 1996) | 2.0 (senare versioner av IE 3.0, januari 1997) | I den här versionen implementerades objektet Arrayoch de allvarligaste buggarna fixades. |
1.2 (Netscape 4.0, juni 1997) | Implementerad switch switch, reguljära uttryck. Praktiskt taget i enlighet med den första utgåvan av ECMA-262-specifikationen. | |
1.3 (Netscape 4.5, oktober 1998) | 3.0 (IE 4.0, oktober 1997) | Kompatibel med den första utgåvan av ECMA-262. |
1.4 (endast Netscape Server) | 4.0 ( Visual Studio 6, ingen IE-version) | Gäller endast Netscape-serverprodukter. |
5.0 (IE 5.0, mars 1999) | ||
5.1 (IE 5.01) | ||
1.5 (Netscape 6.0, november 2000; även senare versioner av Netscape och Mozilla ) |
5.5 (IE 5.5, juli 2000) | Revision 3 (december 1999). Kompatibel med den tredje upplagan av ECMA-262-specifikationen. |
5.6 (IE 6.0, oktober 2001) | ||
1.6 ( Gecko 1.8, Firefox 1.5, nov 2005) | Revision 3 med några kompatibla förbättringar: E4X , tillägg till Array(t.ex. Array.prototype.forEach), förenklingar för Arrayoch String[93] | |
1.7 (Gecko 1.8.1, Firefox 2.0, hösten 2006), JavaScript-tillägg 1.6 | Revision 3, lägger till alla förbättringar från JavaScript 1.6, generatorer och listförståelser från Python , blockomfång med användning och destrukturering av tilldelning ( ) [ 94] . [a*a for (a in iter)]letvar [a, b] = [1, 2] | |
JScript .NET ( ASP.NET ; ingen IE-version) | (JScript .NET tros ha utvecklats med bidrag från andra ECMA- medlemmar ) | |
1.8 (Gecko 1.9, Firefox 3.0, hösten 2008), JavaScript-tillägg 1.7 | Ny notation för funktioner som liknar typiska lambda-uttryck , generatorer , nya metoder för iterativ arraybehandling reduce()och reduceRight()[95] . | |
1.8.1 (Gecko 1.9.1, Firefox 3.5) | Native JSON-stöd, getPrototypeOf()y -metod, , , y Object-metoder [96]trim()trimLeft()trimRight()String | |
2.0 | Revision 4 (pågående arbete [97] , titel reserverad av ECMA men används inte för publicering [Specifikation 9] ) | |
Revision 5 (tidigare känd som ECMAScript 3.1 [97] . Slutförd 3 december 2009 [98] [99] .) |
För att ge en hög abstraktionsnivå och uppnå en acceptabel grad av kompatibilitet över webbläsare används JavaScript-bibliotek i utvecklingen av webbapplikationer. De är en samling återanvändbara föremål och funktioner. Anmärkningsvärda JavaScript-bibliotek inkluderar React.js , Vue.js , Ember.js , Adobe Spry , AngularJS , Svelte , Dojo , , jQuery , Mootools , Prototype , Qooxdoo och Underscore .
I JavaScript blir åtkomst till felsökningsverktyg särskilt användbar när man utvecklar stora, icke-triviala program på grund av skillnader i implementeringar mellan webbläsare (särskilt när det gäller Document Object Model ). Många webbläsare har en inbyggd debugger.
Internet Explorer har tre debuggers: Microsoft Visual Studio är den mest kompletta, följt av Microsoft Script Editor (en komponent i Microsoft Office [100] ), och slutligen den kostnadsfria Microsoft Script Debugger, mycket enklare än de andra två. Den kostnadsfria Microsoft Visual Web Developer Express tillhandahåller en begränsad version med en JavaScript-felsökningsfunktion i Microsoft Visual Studio. I den åttonde versionen av IE, tillsammans med verktyg för utvecklare, dök en inbyggd debugger upp.
Opera har också sin egen debugger, Opera Dragonfly [101] .
Webbapplikationer som du utvecklar i Firefox kan felsökas med hjälp av de inbyggda Firefox Developer Tools.
Safari inkluderar JavaScript WebKit Web Inspector [102] debugger . Samma debugger är också tillgänglig i andra webbläsare som använder WebKit : Google Chrome, Arora , Rekonq , Midori , etc.
De flesta automatiserade testramar för JavaScript-kod kräver att du kör dina tester i webbläsaren. Detta görs med hjälp av en HTML-sida som är testkontexten , som i sin tur laddar allt som behövs för att utföra testet. De första sådana ramverken var JsUnit (skapat 2001), Selenium (skapat 2004) [103] . Ett alternativ är att köra tester från kommandoraden. I det här fallet används miljöer utan webbläsare som Rhino [104] . Ett av de första verktygen av detta slag är Crosscheck, som låter dig testa kod genom att emulera beteendet hos Internet Explorer 6 och Firefox version 1.0 och 1.5 [105] . Ett annat exempel på ett automatiserat testramverk för JavaScript-kod som inte använder en webbläsare för att köra tester är biblioteket env.js skapat av John Resig. Den använder Rhino och innehåller emulering av webbläsarmiljön och DOM [106] .
Blue Ridge, ett plugin för Ruby on Rails webbapplikationsramverk , låter dig enhetstesta JavaScript-kod både i och utanför webbläsaren. Detta uppnås genom att använda det automatiska testramverket Screw.Unit och Rhino med env.js [107] .
Det största problemet med testsystem utan webbläsare är att de använder emuleringar snarare än de faktiska miljöerna där koden exekveras. Detta leder till att ett framgångsrikt godkänt test inte garanterar att koden kommer att fungera korrekt i webbläsaren [108] [109] . Problemet med att testa system som använder en webbläsare är komplexiteten i att arbeta med dem, behovet av att utföra rutinmässiga icke-automatiserade åtgärder [110] . För att lösa detta använder JsTestDriver, ett automatiserat testramverk utvecklat av Google, en server som kommunicerar med webbläsare för att utföra testning [111] . Selenium Remote Control, en del av Seleniums automatiserade testramverk, beter sig på liknande sätt: den inkluderar en server som startar och stoppar webbläsare och fungerar som en HTTP-proxy för förfrågningar till dem [112] . Dessutom innehåller Selenium Selenium Grid, som låter dig testa JavaScript-kod samtidigt på olika datorer med olika miljöer, vilket minskar testkörningstiden [113] . Stöds av QUnit ( jQuery library ), UnitTestJS ( Prototype library ), JSSpec ( MooTools library ), JsUnit, Selenium och Dojo Objective Harness JavaScript automatiserade testramverk, Testswarm är ett distribuerat kontinuerligt integrationsstöd [114] .
En negativ egenskap som ett ramverk för JavaScript-kodtestning kan ha är närvaron av beroenden. Detta skapar en risk att koden som testas som klarar testerna kommer att misslyckas i en miljö som inte har dessa beroenden. Till exempel, den ursprungliga versionen av JsUnitTest, ramverket som skapades och användes för att testa Prototype-biblioteket, var beroende av Prototype själv för att ändra egenskaperna hos objekt i det globala omfånget [115] . Att inkludera ett testverktyg i ett JavaScript-bibliotek är en vanlig praxis. Så YUI Test 3 är en del av Yahoo! UI Library och kan säkert användas för att testa godtycklig JavaScript-kod [116] . QUnit är ett automatiserat testramverk skapat av utvecklarna av jQuery [117] .
Standardiseringen av JavaScript krävde att varumärkesproblem undviks, så ECMA 262-standarden kallar språket ECMAScript, varav tre versioner har publicerats sedan arbetet påbörjades i november 1996.
Objective-J är en strikt, kompakt superset av JavaScript som lägger till JavaScript:
Microsofts VBScript kan , liksom JavaScript, köras på klientsidan i webbsidor. VBScript har en syntax som härrör från Visual Basic och stöds endast i Internet Explorer .
JSON , eller JavaScript Object Notation, är ett allmänt datautbytesformat definierat som en delmängd av JavaScript.
Scheme är också ett systerspråk till JavaScript eftersom båda ger rika funktionella programmeringsfunktioner: JavaScript är ett dynamiskt språk, stöder flexibla arrayer, kan enkelt simulera s-uttryck och har stöd för lambda-uttryck [118] .
JavaScript och JavaEn vanlig missuppfattning är att JavaScript liknar eller är nära besläktat med Java , det är det inte [32] . Båda språken har en C-liknande syntax, är objektorienterade och tenderar att användas i stor utsträckning i webbapplikationer på klientsidan. Viktiga skillnader inkluderar:
JavaScript implementerar tolkarna för ett antal programmeringsspråk, vilket gör det möjligt att använda en webbläsare som körtid för dem. De kan användas till exempel för utbildningsändamål [119] .
HotRuby är en gratis implementering av Rubys virtuella maskin i JavaScript och Flash . Låter dig exekvera bytekod som härrör från YARV -kompilering . Implementerar det mesta av Ruby-grammatiken. Undantagsmekanismen och de flesta av de inbyggda funktionerna och klasserna har ännu inte implementerats [120] . Med HotRuby kan du använda ruby-skript på webbsidor. För att göra detta bör ruby-koden placeras i ett block:
< script type = "text/ruby" > ... </ script >HotRuby extraherar det, skickar det till ett fjärrskript för kompilering och visar sedan resultaten på sidan [121] . Denna implementering tillåter åtkomst från Ruby till JavaScript-objekt [122] .
Tabell över implementeringar av JavaScript-programmeringsspråkSpråk | Implementeringsnamn | Huvudförfattare | Licens |
---|---|---|---|
JavaScript | s-mr [123] | Andrei Formiga | NewBSD |
postskriptum | WPS [124] | Tom Hlavaty | ? |
Assembler för MOS Technology 6502 | 6502asm [125] | Stian Soreng | GPL |
Mål-J | Cappuccino [126] | Ross Boucher | LGPL |
Haskell | ycr2js [127] | Tom Shackell, Neil Mitchell, Andrew Wilkinson, Mike Dodds, Bob Davie, Dimitry Golubovsky | enkel tillåtande licens |
Prolog | Monash Toy Prolog [128] | Lloyd Allison | ? |
ioctls [129] | Jan Grant | ? | |
katt | Katttolk [130] | Christopher Diggins | allmängods |
Schema | BiwaScheme [131] | Yutaka Hara | MIT |
GRUNDLÄGGANDE | Ganska BASIC [132] | Nikko Ström | gratis egendom |
Lily | Lily [133] | Bill Orcutt | MIT |
Vidare | wForth [134] | K Jacobson | ? |
PHP | pype [135] | ||
Python 3 | PyPy.js | ? | ? |
Oberon 07 | oberonjs [136] | Vlad Folts | MIT |
Vissa programmeringsspråk ger stöd för att interagera med JavaScript-kod.
Hittills tillhandahålls JavaScript-stöd av moderna versioner av alla de vanligaste webbläsarna. Internet Explorer , Opera , Mozilla Firefox , Safari , Google Chrome har fullt stöd för 3:e utgåvan ECMA-262. Samtidigt försökte Mozilla Firefox implementera stöd för den fjärde upplagan av specifikationen, och den första webbläsaren där ofullständigt stöd för 3.1-specifikationen dök upp var Internet Explorer 8 [140] .
Misstag som görs av utvecklare av populära webbläsare i implementeringen av specifikationen är vanligtvis mindre [141] . Från och med november 2009 har dokumentobjektmodellen mer begränsat stöd [142] .
Enligt skaparen av språket kan Microsofts stöd i Internet Explorer av en av de snabba JavaScript-motorer som finns och används i andra webbläsare leda till uppkomsten av applikationer som fungerar med tredimensionell grafik , 3D-spel skrivna i JavaScript, användning av JavaScript i uppgifter som tidigare använde teknologin Adobe Flash [143] .
Regressionstestning av webbläsarkompatibilitet med den tredje upplagan av ECMA-262-specifikationen kan utföras [144] [145] med hjälp av det Google-utvecklade verktyget för att testa överensstämmelse med ECMAScript-specifikationen Sputnik , som inkluderar mer än fem tusen tester fall [146] och namngavs efter det ryska Google-teamet [146] , såväl som skalet sputniktests-webrunner [147] skrivet av Yuri Zaitsev eller Google -tjänsten [148] . Testfallen som ingår i Sputnik uppdateras i samband med lanseringen av den femte upplagan av ECMA-262-specifikationen, vilket återspeglar förändringar jämfört med dess tidigare utgåva [149] .
ECMAScript 5 Conformance Suite [150] är en testsvit som släppts av Microsoft under BSD-licensen [151] för att verifiera att en implementering av ECMAScript-språket överensstämmer med dess femte utgåvaspecifikation. Den 12 mars 2010 fanns det 1236 testfall i paketet, det hade version 0.2 alfa och antalet nedladdningar under tre månader var 178 [152] .
Mozillas [153] [154] JavaScript Test Suite är tillgänglig för att testa riktigheten av JavaScript-implementeringar .
JavaScript tillåter potentiella författare av skadlig kod att köra den på vilken dator som helst i nätverket genom att helt enkelt öppna en webbsida på den. Detta resulterar i två grundläggande begränsningar:
Dessutom inför webbläsarleverantörer ytterligare begränsningar som svar på missbruk som äger rum. Så här såg i synnerhet förbudet att öppna ett fönster ut, vars ena sida är mindre än hundra pixlar [155] .
Sårbarheter över flera webbplatserEtt vanligt problem med JavaScript är cross-site scripting eller XSS, ett brott mot domänbegränsningsregeln. XSS-sårbarheter uppstår i situationer där en angripare har möjlighet att placera skript på en sida som visas för användaren. I det här fallet får skriptet åtkomst till webbplatsen med rättigheterna för denna användare, vilket i vissa fall öppnar möjligheten att skicka konfidentiell information och göra oönskade transaktioner .
XSS-sårbarheter uppstår också på grund av misstag gjorda av webbläsarutvecklare [157] .
En annan typ av sårbarhet på flera ställen är förfalskning av begäranden på flera ställen eller CSRF. Det ligger i förmågan hos angriparens webbplats att tvinga användarens webbläsare att utföra en oönskad åtgärd på målplatsen (till exempel en banköverföring av pengar). Detta är möjligt om målwebbplatsen endast förlitar sig på HTTP-cookies eller auktoriseringsförfrågningar. I det här fallet exekveras förfrågningar som initieras av angriparens webbplatskod på samma sätt som användarförfrågningar om han är auktoriserad på målplatsen. Ett av sätten att skydda mot CSRF är att utföra autentisering på varje begäran som leder till oåterkalleliga konsekvenser. Att analysera HTTP-hänvisningen kan också hjälpa .
Felplacerat förtroende på klientsidanUtvecklare av klientapplikationer, oavsett om de använder JavaScript eller inte, måste vara medvetna om att de senare kan vara under kontroll av angripare. Därför kan alla kontroller på klientsidan kringgås, JavaScript kan antingen köras eller inte. Obfuskerad kod kan omvändas ; formulärdata kan skickas till servern utan JavaScript- validering ; skript kan inaktiveras delvis, så till exempel kan tillförlitligt skydd mot att spara bilder med JavaScript inte implementeras [158] ; det är extremt oförsiktigt att bädda in lösenordet i JavaScript som körs på klienten, där det kan hittas av en angripare.
Buggar i webbläsaren, plugins och tilläggJavaScript tillhandahåller ett gränssnitt för ett brett utbud av webbläsarfunktioner, av vilka några kan innehålla buggar som buffertspill . Detta gör att du kan skriva skript som gör att godtycklig kod exekveras på användarens system.
Liknande buggar har hittats i vanliga webbläsare, inklusive Mozilla Firefox [159] , Internet Explorer [160] , Safari [161] . När man identifierar potentiellt farliga fel i webbläsaren och har information om implementerade exploateringar rekommenderar tillverkaren och säkerhetsexperter att inaktivera JavaScript innan uppdateringen släpps [ 162] [163] .
Plugins som spelare , Macromedia Flash och ett antal ActiveX- komponenter som är tillgängliga som standard i Internet Explorer kan också innehålla buggar som utnyttjas med JavaScript, vilket har hänt tidigare [164] [165] .
Mozilla Firefox-tillägg är inte isolerade från varandra: ett tillägg kan fixa ett annat, vilket kan utnyttjas av angripare. På SecurityByte & Owasp AppSec Asia 2009 demonstrerade Roberto Suggi Liverani och Nick Freeman tre exploits i populära Firefox-tillägg, nedladdade över 30 miljoner gånger från webbplatsen [166] .
Implementeringsbuggar i sandlådanWebbläsare kan köra JavaScript utanför sandlådan med de privilegier som krävs för att skapa och ta bort filer, till exempel. Sådana privilegier bör dock inte ges till kod från webben.
Felaktiga privilegier för JavaScript från webben har varit orsaken till sårbarheter i både Internet Explorer [167] och Mozilla Firefox [168] .
Microsoft Windows tillåter JavaScript-filer att köras som vanliga program utan att vara sandlådor. Detta gör det möjligt att skapa trojaner [169] .
JavaScript | |
---|---|
Idéer | |
Kompilatorer | |
Motorer | |
Bibliotek och ramar | |
Redaktörer | |
Verktyg |
|
Relaterade teknologier | |
människor | |
Kategori |
ECMAScript | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Dialekter |
| ||||||||||||
Motorer ( jämförelse ) |
| ||||||||||||
Ramar , bibliotek |
| ||||||||||||
människor | |||||||||||||
Övrig |
|
Programmeringsspråk | |
---|---|
|
Webb och hemsidor | |
---|---|
globalt | |
Lokalt | |
Typer av webbplatser och tjänster |
|
Skapande och underhåll | |
Typer av layouter, sidor, webbplatser | |
Teknisk | |
Marknadsföring | |
Samhälle och kultur |