JavaScript | |
---|---|
Sprog klasse |
multiparadigme : objektorienteret ( prototypisk ), generaliseret , funktionel , imperativ , aspektorienteret , begivenhedsdrevet programmering |
Udførelsestype | fortolkning, oversættelse til Java bytecode [ 1] , JIT til native kode [2] |
Dukkede op i | 1995 |
Forfatter | Brendan Eich |
Filtypenavn _ | .js, .cjs, .mjs[Спецификация 1] |
Frigøre | ECMAScript 2022 [3] (juni 2022 ) |
Type system | dynamisk , and |
Større implementeringer | SpiderMonkey , Rhino , KJS (JavaScript) , JavaScriptCore , V8 |
Blev påvirket | Lua , Self [4] , C , Scheme [4] , Perl [4] , Python , Java [4] , AWK [4] , HyperTalk [4] |
påvirket | Objective-J , Dart , TypeScript |
Mediefiler på Wikimedia Commons |
JavaScript | |
---|---|
Udvidelse | .js[7] |
MIME -type | tekst/javascript, applikation/javascript [5] [6] |
offentliggjort | september 1995 [8] |
Formattype | tekstfil med kildekode |
Udvidet fra | ECMAScript |
Mediefiler på Wikimedia Commons |
JavaScript ( / ˈ dʒ ɑː v ɑː ˌ s k r ɪ p t / ; forkortelse JS /ˈdʒeɪ.ɛs./ ) er et multiparadigme programmeringssprog . Understøtter objektorienterede , imperative og funktionelle stilarter. Det er en implementering af ECMAScript - specifikationen (ECMA-262 [9] standard ).
JavaScript er almindeligvis brugt som et integreret sprog til programmatisk adgang til applikationsobjekter . Det er mest udbredt i browsere som et scriptsprog til at gøre websider interaktive [10] .
Vigtigste arkitektoniske funktioner: dynamisk indtastning , svag indtastning , automatisk hukommelsesstyring , prototypisk programmering , fungerer som førsteklasses objekter .
JavaScript er blevet påvirket af mange sprog, og målet var at få sproget til at ligne Java. JavaScript er ikke ejet af nogen virksomhed eller organisation, hvilket adskiller det fra en række programmeringssprog, der bruges i webudvikling [~ 1] [11] .
Navnet "JavaScript" er et amerikansk registreret varemærke tilhørende Oracle Corporation [ 12] .
I 1992 begyndte Nombas ( efterfølgende erhvervet af Openwave ) at udvikle et integreret scriptsprog Cmm (C-minus-minus), som ifølge udviklerne skulle være kraftigt nok til at erstatte makroer , samtidig med at ligheden med C bevaredes. , så udviklere nemt kan lære det [13] . Den største forskel fra C var hukommelseshåndtering. I det nye sprog blev al hukommelsesstyring udført automatisk: der var ingen grund til at oprette buffere , deklarere variabler og udføre typekonvertering. I andre henseender lignede sprogene hinanden meget: især Cmm understøttede standardfunktioner og C-operatorer [14] . Cmm blev omdøbt til ScriptEase , fordi det oprindelige navn lød for negativt, og omtalen af C i det "skræmte" folk [13] [15] . Baseret på dette sprog blev det proprietære produkt CEnvi oprettet . I slutningen af november 1995 udviklede Nombas en version af CEnvi , der er indlejret i websider. Siderne, der kunne ændres ved hjælp af scriptsproget, blev kaldt Espresso Pages , som demonstrerede brugen af scriptsproget til at skabe et spil, validere brugerinput i formularer og skabe animationer. Espresso Pages blev placeret som en demo for at hjælpe med at forestille sig, hvad der ville ske, hvis Cmm- sproget blev implementeret i browseren . De fungerede kun i 16-bit Netscape Navigator under Windows [16] .
Den allerførste JavaScript-implementering blev skabt af Brendan Eich hos Netscape og er siden blevet opdateret til at overholde ECMA-262 Edition 5 og senere. Denne motor kaldes SpiderMonkey og er implementeret i C/ C++ . Rhino-motoren blev skabt af Norris Boyd og implementeret i Java. Ligesom SpiderMonkey overholder Rhino ECMA-262 Edition 5.
Brendan Eich , ansat af Netscape den 4. april 1995 [18] , fik til opgave at bringe Scheme -programmeringssproget eller noget lignende ind i Netscape-browseren. Da kravene blev sløret, blev Eich flyttet til Server Products-gruppen, hvor han brugte en måned på at forbedre HTTP-protokollen [18] . I maj blev udvikleren overført tilbage til klient-siden (browser) teamet, hvor han straks begyndte at udvikle konceptet med et nyt programmeringssprog. Browserudviklingsledelse, inklusive Tom Paquin , Michael Toy , Rick Schell , var overbevist om, at Netscape skulle understøtte et programmeringssprog indlejret i sidens HTML-kode [ 19 ] .
Ud over Brendan Eich deltog [18 ] Netscape Communications medstifter [20] Mark Andressen og Sun Microsystems medstifter Bill Joy i udviklingen : for at have tid til at afslutte arbejdet med sproget til udgivelsen af browseren , indgik virksomhederne en udviklingssamarbejdsaftale [21] . De satte sig det mål at give et "sprog til at lime" de bestanddele af en webressource: billeder, plug-ins, Java-applets, hvilket ville være praktisk for webdesignere og programmører, som ikke har høje kvalifikationer [18] .
Sproget hed oprindeligt Mocha [23] [24] [25] efter forslag fra Mark Andreessen [22] , blev implementeret af Brendan Eich inden for ti dage, og blev først inkluderet i pre-alpha versionen af Netscape 2 [22] . Derefter blev det omdøbt til LiveScript [25] [26] og var beregnet til både klient-side programmering og server-side programmering (hvor det skulle hedde LiveWire) [21] . Syntaksen var påvirket af C- og Java-sprogene , og da Java var et buzzword på det tidspunkt [18] [21] , blev LiveScript omdøbt til JavaScript [27] den 4. december 1995 , licenseret fra Sun. JavaScript-meddelelsen fra Netscape og Suns repræsentanter fandt sted på tærsklen til udgivelsen af den anden betaversion af Netscape Navigator [18] . Den erklærer, at 28 førende it-virksomheder har udtrykt deres hensigt om at bruge JavaScript som et åbent standard-objekt-scriptsprog i deres fremtidige produkter [28] .
I 1996 udgav Microsoft en analog af JavaScript-sproget kaldet JScript . Dette sprog blev annonceret den 18. juli 1996 [29] . Den første browser, der understøttede denne implementering, var Internet Explorer 3.0.
På initiativ af Netscape [30] [31] blev sproget standardiseret af ECMA - foreningen . Den standardiserede version kaldes ECMAScript , beskrevet af ECMA-262- standarden . Den første version af specifikationen svarede til JavaScript version 1.1, samt sprogene JScript og ScriptEasy [13] [21] .
I Verdens mest misforståede programmeringssprog er blevet verdens mest populære programmeringssprog [ 32] argumenterer Douglas Crockford for, at den førende position JavaScript har overtaget på grund af udviklingen af AJAX , da browseren er blevet det fremherskende applikationsleveringssystem. Han bemærker også den voksende popularitet af JavaScript, det faktum, at dette sprog er indlejret i applikationer, understreger betydningen af sproget.
Ifølge TIOBE-indekset , baseret på Google , MSN , Yahoo! , Wikipedia og YouTube , i april 2015 lå JavaScript på 6. pladsen (for et år siden - på 9.) [33] .
Ifølge Black Duck Software [34] har brugen af JavaScript været stigende inden for open source-softwareudvikling . 36 % af projekterne udgivet mellem august 2008 og august 2009 involverer JavaScript, det mest almindeligt anvendte programmeringssprog med hastigt voksende popularitet. 80 % af open source-software bruger C, C++, Java, Shell og JavaScript. JavaScript er dog det eneste af disse sprog, hvis andel af brugen er steget (mere end 2 procent, hvis du tæller i kodelinjer) [35] .
JavaScript er det mest populære programmeringssprog, der bruges til at udvikle webapplikationer på klientsiden [36] [37] .
JavaScript er et objektorienteret sprog, men den prototyping , der bruges i sproget [38] [39] forårsager forskelle i arbejdet med objekter sammenlignet med traditionelle klasseorienterede sprog. Derudover har JavaScript en række egenskaber iboende i funktionelle sprog - fungerer som førsteklasses objekter, objekter som lister, currying , anonyme funktioner , lukninger [40] - hvilket giver sproget yderligere fleksibilitet.
På trods af den samme syntaks som C, har JavaScript grundlæggende forskelle sammenlignet med C-sproget :
Sproget mangler sådanne nyttige ting [41] som:
Syntaksen i JavaScript minder meget om den i C og Java , men semantisk er sproget meget tættere på Self , Smalltalk eller endda Lisp [32] [42] [Specifikation 2] .
I JavaScript:
Strukturelt kan JavaScript repræsenteres som en forening af tre adskilte dele [43] [44] [45] [46] :
Når JavaScript overvejes i ikke-browsermiljøer, understøttes browserobjektmodellen og dokumentobjektmodellen muligvis ikke [45] .
Dokumentobjektmodellen opfattes nogle gange som en separat enhed fra JavaScript [47] [48] [Specifikation 3] , hvilket er i overensstemmelse med definitionen af DOM som en sproguafhængig dokumentgrænseflade [49] [~ 3] . I modsætning hertil finder en række forfattere, at BOM og DOM er tæt beslægtede [50] [51] .
CoreECMAScript er ikke et browsersprog og definerer ikke input- og outputmetoder [43] . Det er snarere grundlaget for at bygge scriptsprog. ECMAScript-specifikationen beskriver datatyper, instruktioner, nøgleord, reserverede ord, operatorer , objekter, regulære udtryk uden at begrænse forfattere af afledte sprog fra at udvide dem med nye komponenter.
BrowserobjektmodelBrowserobjektmodellen er en browserspecifik del af sproget [45] [52] , der er et lag mellem kernen og dokumentobjektmodellen [53] . Det primære formål med browserobjektmodellen er at administrere og interagere med browservinduer. Hvert af browservinduerne er repræsenteret af et objekt window, det centrale DOM-objekt. Browserobjektmodellen er i øjeblikket ikke standardiseret [45] [54] , men en specifikation er under udvikling af WHATWG [53] [Spec 4] og W3C [44] [Spec 5] .
Ud over at administrere vinduer giver browsere i browserobjektmodellen typisk support til følgende entiteter [53] [54] :
Document Object Model er en applikationsprogrammeringsgrænseflade til HTML- og XML - dokumenter [55] . Ifølge DOM kan et dokument (for eksempel en webside) repræsenteres som et træ af objekter, der har en række egenskaber, der giver dig mulighed for at udføre forskellige manipulationer med det:
For at tilføje JavaScript-kode til en side kan du bruge <script></script>[Specifikation 6] tags , som anbefales, men ikke påkrævet, placeret inde i <head>. Der kan være et hvilket som helst antal containere <script>i ét dokument. Attributten type="text/javascript"er valgfri, denne værdi bruges som standard [56] .
Et script, der viser et modalt vindue med den klassiske inskription "Hello, World!" inde i browseren:
< script type = "applikation/javascript" > advarsel ( 'Hej, verden!' ); </ script >
HTML-specifikationen beskriver et sæt attributter, der bruges til at definere hændelseshandlere [Specifikation 7] . Eksempel på brug:
< a href = "delete.php" onclick = "confirm('Er du sikker?'); return false;" > Slet </a> _ _I ovenstående eksempel, når du klikker på linket, confirm('Вы уверены?');kalder funktionen et modalt vindue frem med inskriptionen "Er du sikker?", men return false;blokerer overgangen til linket. Denne kode vil selvfølgelig kun virke, hvis browseren har og JavaScript-understøttelse aktiveret, ellers vil linket blive fulgt uden varsel.
Brug af JavaScript-kode i forbindelse med sidemarkering betragtes som dårlig praksis inden for diskret JavaScript . Analog (forudsat at linket er forsynet med en identifikator alertLink)
<a id="alertLink"> _ _ _ _ Slet </a> _ _Ovenstående eksempel kan for eksempel være følgende JavaScript-kodestykke:
vindue . onload = () => { const linkWithAlert = dokument . getElementById ( 'alertLink' ); linkWithAlert . addEventListener ( 'klik' , async () => { if ( bekræft ( 'Er du sikker?' )) { await fetch ( 'delete' , { method : 'DELETE' }) } }) }; Flytter til en separat filDer er en tredje måde at forbinde JavaScript på - skriv et script i en separat fil, og tilslut det derefter ved hjælp af konstruktionen
< body > < script type = "application/javascript" src = "http://Path_to_coscript_file" > </ script > </ body > Attributter for scriptelementetScript-elementet, der er meget brugt til at oprette forbindelse til en JavaScript-side, har flere attributter.
RFC - 4329- arbejdsforslaget, der definerer [57] en MIME-type, der er i overensstemmelse med JavaScript, siger :
medietyper
som også er defineret i dette dokument, er beregnet til praktisk brug og bør foretrækkes.
Originaltekst (engelsk)[ Visskjule] Brug af "tekst"-topniveautypen til denne type indhold er kendt for at være problematisk. Dette dokument definerer text/javascriptog text/ecmascriptmarkerer dem således som "forældede". Brug af eksperimentelle og uregistrerede medietyper, som angivet delvist ovenfor, frarådes.medietyperne,
Samtidig er language ( language="JavaScript") attributten, på trods af dens aktive brug (i 2008 var denne attribut den mest brugte attribut for <script>[58] tag ), forældet, er ikke i DTD og anses derfor for at være forkert [ 59] .
JavaScript bruges i klientsiden af webapplikationer: klient-server-programmer, hvor browseren er klienten og webserveren er serveren, med logik fordelt mellem serveren og klienten. Udvekslingen af information i webapplikationer foregår over netværket. En fordel ved denne tilgang er, at klienter er uafhængige af brugerens bestemte operativsystem, så webapplikationer er tjenester på tværs af platforme.
AJAXJavaScript bruges i AJAX , en populær tilgang til at bygge interaktive brugergrænseflader til webapplikationer, der involverer en asynkron "baggrundskommunikation" mellem browseren og webserveren. Som et resultat heraf genindlæses websiden ikke fuldstændigt ved opdatering af data, og webapplikationsgrænsefladen bliver hurtigere, end den ville være med den traditionelle tilgang (uden at bruge AJAX).
KometComet er et bredt begreb, der beskriver, hvordan webapplikationer fungerer ved hjælp af vedvarende HTTP-forbindelser, som gør det muligt for en webserver at sende data til en browser uden yderligere anmodning fra browseren. Disse applikationer bruger teknologier, der understøttes direkte af browsere. Især gør de udstrakt brug af JavaScript.
Browser operativsystemerJavaScript er meget udbredt i browseroperativsystemer . Så for eksempel er IndraDesktop WebOS -kildekoden 75 % JavaScript, IntOS- browserens operativsystemkode er 70 %. Andelen af JavaScript i kildekoden til eyeOS er 5 %, men selv i dette operativsystem spiller JavaScript en vigtig rolle, idet det deltager i gengivelsen på klienten og er en nødvendig mekanisme til at kommunikere mellem klienten og serveren [60 ] .
JavaScript bruges til at lave små programmer, der er bogmærket i browseren. Dette bruger URL'er med javascript:[61] specifikationen .
Browserbrugerscripts er JavaScript-programmer, der kører i brugerens browser, når en side indlæses. De giver dig mulighed for automatisk at udfylde formularer, omformatere sider, skjule uønsket indhold og integrere indhold, som du vil vise, ændre adfærden på klientsiden af webapplikationer, tilføje kontrolelementer til siden og så videre.
Mozilla Firefox bruger Greasemonkey -udvidelsen til at administrere brugerscripts ; Opera [62] [63] [64] og Google Chrome [65] giver support til brugerscripts og muligheden for at udføre en række Greasemonkey-scripts.
Programmer skrevet i JavaScript kan køre på servere, der kører Java 6 og nyere [66] . Denne omstændighed bruges til at bygge serverapplikationer, der tillader JavaScript at blive behandlet på serversiden.
Ud over Java 6 er der en række platforme, der bruger eksisterende JavaScript-motorer (tolke) til at køre serverapplikationer. (Som regel taler vi om at genbruge motorer, der tidligere er oprettet til at udføre JavaScript-kode i WWW-browsere.)
Navn | JavaScript-motor brugt | Sprog, som motoren og platformen er skrevet på | Licens |
---|---|---|---|
Jaxer [67] | Spider Monkey [68] | C++, C | GPL 3 [69] |
vedholde rammer [70] | næsehorn | Java | Ændret BSD-licens [71] |
Helma [72] | næsehorn | Java, JavaScript | BSD-lignende Helma License 2.0 [73] |
v8cgi | V8 | C++, JavaScript | BSD-licens [74] |
node.js | V8 | C++ | MIT-licens [75] |
gopherjs | gå | gå | BSD-licens |
Server-side JavaScript bruges i Google -projekter [76] . For eksempel tillader Google Sites tilpasning ved hjælp af JavaScript-scripts udført af Rhino-motoren [77] .
Overgangen af Palm mobile enheder til at bruge Palm webOS som operativsystem med Mojo SDK som et udviklingssæt [78] gør det muligt at bruge JavaScript som et mobilapplikationsudviklingssprog [79] [80] .
En widget er et ekstra miniprogram, hvis grafiske modul er placeret i arbejdsområdet i det tilsvarende overordnede program , som tjener til at dekorere arbejdsområdet, underholde, løse individuelle arbejdsopgaver eller hurtigt få information fra internettet uden ved hjælp af en webbrowser. JavaScript bruges både til at implementere widgets og til at implementere widgetmotorer. Især Apple Dashboard , Microsoft Gadgets , Yahoo! Widgets , Google Gadgets , Klipfolio Dashboard .
JavaScript bruges til at skrive applikationssoftware . For eksempel er 16,4 % af Mozilla Firefox -kildekoden skrevet i JavaScript.
Google Chrome OS bruger webapplikationer som applikationssoftware [81] .
GNOME -skrivebordsmiljøet har evnen til at skabe JavaScript-programmer, der fungerer på GNOME-bibliotekerne ved hjælp af Gjs , Seed [82] .
JavaScript finder også anvendelse som et scriptsprog til at få adgang til applikationsobjekter. Mozilla-platformen ( XUL / Gecko ) bruger JavaScript. Blandt tredjepartsprodukter har Java for eksempel inkluderet en indbygget Rhino - baseret JavaScript-fortolker siden version 6 [66] . JavaScript-scripting er understøttet i Adobe-programmer såsom Adobe Photoshop , Adobe Dreamweaver , Adobe Illustrator og Adobe InDesign .
JavaScript bruges i kontorapplikationer til at automatisere rutinehandlinger, skrive makroer og organisere adgang fra webtjenester.
Microsoft OfficeExcel Services 2010 tilføjede [83] to nye applikationsprogrammeringsgrænseflader: REST API og JavaScript Object Model ( JSOM ).
JavaScript er et af de programmeringssprog, der bruges til at skrive makroer i applikationer, der er en del af OpenOffice.org [85] . OpenOffice.org integrerer Rhino JavaScript-fortolkeren [86] . Fra december 2009 var JavaScript-understøttelse begrænset. Begrænsninger iboende i [86] udvikling af OpenOffice.org-makroer i JavaScript:
OpenOffice.org har en JavaScript-editor og debugger [87] .
JavaScript har propædeutisk værdi, hvilket tillader en kombination af intensiv programmeringspraksis og bredden af teknologier, der bruges til undervisning i datalogi [88] . At undervise i dette sprog på skolen giver dig mulighed for at skabe en base for at lære webprogrammering , bruge kreative projekter i klasseværelset [89] . Det tilsvarende kursus giver dig mulighed for at give et dybtgående studie af datalogi, og det giver mening at inkludere det i valgfrie kurser på et dybtgående uddannelsesniveau [90] .
JavaScript er et egnet sprog til at lære spilprogrammering . Sammenlignet med alternativer er det funktionelt tilstrækkeligt, nemt at lære og bruge, reducerer kompleksiteten for læring, motiverer elever til at dele deres spil med andre [91] .
Dele om implementering i JavaScript af klassiske algoritmer , teknikker, datastrukturer , som ikke er inkluderet i Nicholas Zakas ' bog "Professional JavaScript for Web Developers" , tjente [92] som begyndelsen på Computer science in JavaScript -projektet [~ 4] .
JavaScript | Tilsvarende JScript-version | Væsentlige ændringer |
---|---|---|
1.0 ( Netscape 2.0, marts 1996) | 1.0 (tidlige versioner af IE 3.0, august 1996) | Den originale version af JavaScript-sproget. |
1.1 (Netscape 3.0, august 1996) | 2.0 (senere versioner af IE 3.0, januar 1997) | I denne version blev objektet implementeret, Arrayog de mest alvorlige fejl blev rettet. |
1.2 (Netscape 4.0, juni 1997) | Implementeret switch switch, regulære udtryk. Praktisk taget bragt i overensstemmelse med den første udgave af ECMA-262-specifikationen. | |
1.3 (Netscape 4.5, oktober 1998) | 3.0 (IE 4.0, oktober 1997) | Kompatibel med den første udgave af ECMA-262. |
1.4 (kun Netscape Server) | 4.0 ( Visual Studio 6, ingen IE-version) | Gælder kun for Netscape-serverprodukter. |
5.0 (IE 5.0, marts 1999) | ||
5.1 (IE 5.01) | ||
1.5 (Netscape 6.0, november 2000; også senere versioner af Netscape og Mozilla ) |
5.5 (IE 5.5, juli 2000) | Revision 3 (december 1999). Kompatibel med den tredje udgave af ECMA-262-specifikationen. |
5.6 (IE 6.0, oktober 2001) | ||
1.6 ( Gecko 1.8, Firefox 1.5, nov. 2005) | Revision 3 med nogle kompatible forbedringer: E4X , tilføjelser til Array(f.eks. Array.prototype.forEach), forenklinger til Arrayog String[93] | |
1.7 (Gecko 1.8.1, Firefox 2.0, efterår 2006), JavaScript-udvidelse 1.6 | Revision 3, tilføjelse af alle forbedringerne fra JavaScript 1.6, generatorer og listeforståelser fra Python , blokomfang ved brug af og destrukturering af tildeling ( ) [ 94] . [a*a for (a in iter)]letvar [a, b] = [1, 2] | |
JScript .NET ( ASP.NET ; ingen IE-version) | (JScript .NET menes at være udviklet med bidrag fra andre ECMA- medlemmer ) | |
1.8 (Gecko 1.9, Firefox 3.0, efterår 2008), JavaScript-udvidelse 1.7 | Ny notation for funktioner, der ligner typiske lambda-udtryk , generatorer , nye metoder til iterativ array-behandling reduce()og reduceRight()[95] . | |
1.8.1 (Gecko 1.9.1, Firefox 3.5) | Native JSON-understøttelse, getPrototypeOf()y- metode, , , y- Objectmetoder [96]trim()trimLeft()trimRight()String | |
2.0 | Revision 4 (igangværende arbejde [97] , titel reserveret af ECMA, men ikke brugt til offentliggørelse [Specifikation 9] ) | |
Revision 5 (tidligere kendt som ECMAScript 3.1 [97] . Afsluttet 3. december 2009 [98] [99] .) |
For at give et højt abstraktionsniveau og opnå en acceptabel grad af cross-browser-kompatibilitet bruges JavaScript-biblioteker i udviklingen af webapplikationer. De er en samling af genanvendelige genstande og funktioner. Bemærkelsesværdige JavaScript-biblioteker omfatter React.js , Vue.js , Ember.js , Adobe Spry , AngularJS , Svelte , Dojo , , jQuery , Mootools , Prototype , Qooxdoo og Underscore .
I JavaScript bliver adgang til debuggere særlig nyttig, når der udvikles store, ikke-trivielle programmer på grund af forskelle i implementeringer på tværs af browsere (især med hensyn til Document Object Model ). Mange browsere har en indbygget debugger.
Internet Explorer har tre debuggere: Microsoft Visual Studio er den mest komplette, efterfulgt af Microsoft Script Editor (en komponent i Microsoft Office [100] ), og endelig den gratis Microsoft Script Debugger, meget enklere end de to andre. Den gratis Microsoft Visual Web Developer Express giver en begrænset version med en JavaScript-fejlfindingsfunktion i Microsoft Visual Studio. I den ottende version af IE, sammen med værktøjer til udviklere, dukkede en indbygget debugger op.
Opera har også sin egen debugger, Opera Dragonfly [101] .
Webapplikationer, du udvikler i Firefox , kan fejlsøges ved hjælp af de indbyggede Firefox-udviklerværktøjer.
Safari inkluderer JavaScript WebKit Web Inspector [102] debugger . Den samme debugger er også tilgængelig i andre browsere, der bruger WebKit : Google Chrome, Arora , Rekonq , Midori , osv.
De fleste automatiserede testrammer for JavaScript-kode kræver, at du kører dine tests i browseren. Dette gøres ved hjælp af en HTML-side, der er testkonteksten , som igen indlæser alt det nødvendige for at udføre testen. De første sådanne rammer var JsUnit (oprettet i 2001), Selenium (oprettet i 2004) [103] . Et alternativ er at køre test fra kommandolinjen. I dette tilfælde bruges ikke-browsermiljøer såsom Rhino [104] . Et af de første værktøjer af denne art er Crosscheck, som giver dig mulighed for at teste kode ved at emulere adfærden i Internet Explorer 6 og Firefox version 1.0 og 1.5 [105] . Et andet eksempel på en automatiseret testramme for JavaScript-kode, der ikke bruger en browser til at køre test, er biblioteket env.js, der er oprettet af John Resig. Den bruger Rhino og indeholder emulering af browsermiljøet og DOM [106] .
Blue Ridge, et plugin til Ruby on Rails webapplikationsramme , giver dig mulighed for at enhedsteste JavaScript-kode både ind og ud af browseren. Dette opnås ved at bruge Screw.Units automatiserede testramme og Rhino med env.js [107] .
Hovedproblemet med testsystemer uden browser er, at de bruger emuleringer i stedet for de faktiske miljøer, hvor koden udføres. Dette fører til, at en vellykket beståelse af tests ikke garanterer, at koden fungerer korrekt i browseren [108] [109] . Problemet med at teste systemer, der bruger en browser, er kompleksiteten af at arbejde med dem, behovet for at udføre rutinemæssige ikke-automatiserede handlinger [110] . For at løse dette bruger JsTestDriver, en automatiseret testramme udviklet af Google, en server, der kommunikerer med browsere til at udføre test [111] . Selenium Remote Control, en del af Seleniums automatiserede testramme, opfører sig på en lignende måde: den inkluderer en server, der starter og stopper browsere og fungerer som en HTTP-proxy for anmodninger til dem [112] . Derudover indeholder Selenium Selenium Grid, som giver dig mulighed for samtidigt at teste JavaScript-kode på forskellige computere med forskellige miljøer, hvilket reducerer testudførelsestiden [113] . Understøttet af QUnit ( jQuery library ), UnitTestJS ( Prototype library ), JSSpec ( MooTools library ), JsUnit, Selenium og Dojo Objective Harness JavaScript automatiserede testrammer, Testswarm er en distribueret kontinuerlig integrationsunderstøttelse [114] .
En negativ egenskab, som en JavaScript-kodetestramme kan have, er tilstedeværelsen af afhængigheder. Dette skaber en risiko for, at koden under test, der består testene, fejler i et miljø, der ikke har disse afhængigheder. For eksempel var den originale version af JsUnitTest, den ramme, der blev oprettet og brugt til at teste Prototype-biblioteket, af Prototype selv for at ændre egenskaberne for objekter i det globale omfang [115] . At inkludere et testværktøj i et JavaScript-bibliotek er en almindelig praksis. Så YUI Test 3 er en del af Yahoo! UI-bibliotek og kan sikkert bruges til at teste vilkårlig JavaScript-kode [116] . QUnit er en automatiseret testramme skabt af udviklerne af jQuery [117] .
Standardiseringen af JavaScript krævede, at varemærkeproblemer blev undgået, så ECMA 262-standarden kalder sproget ECMAScript, hvoraf tre revisioner er blevet offentliggjort, siden arbejdet begyndte i november 1996.
Objective-J er et strengt, kompakt supersæt af JavaScript, der tilføjer JavaScript:
Microsofts VBScript kan ligesom JavaScript køres på klientsiden på websider. VBScript har en syntaks afledt af Visual Basic og understøttes kun i Internet Explorer .
JSON eller JavaScript Object Notation er et dataudvekslingsformat til generelle formål defineret som en delmængde af JavaScript.
Scheme er også et søstersprog til JavaScript, fordi begge giver rige funktionelle programmeringsfunktioner: JavaScript er et dynamisk sprog, understøtter fleksible arrays, kan nemt simulere s-udtryk og har understøttelse af lambda-udtryk [118] .
JavaScript og JavaEn almindelig misforståelse er, at JavaScript ligner eller er tæt beslægtet med Java , det er det ikke [32] . Begge sprog har en C-lignende syntaks, er objektorienterede og har tendens til at blive brugt i vid udstrækning i webapplikationer på klientsiden. Vigtige forskelle omfatter:
JavaScript implementerer tolkene af en række programmeringssprog, hvilket gør det muligt at bruge en webbrowser som runtime for dem. De kan for eksempel bruges til uddannelsesformål [119] .
HotRuby er en gratis implementering af Ruby virtuelle maskine i JavaScript og Flash . Giver dig mulighed for at udføre bytekode , der stammer fra YARV- kompilering . Implementerer det meste af Ruby-grammatikken. Undtagelsesmekanismen og de fleste af de indbyggede funktioner og klasser er endnu ikke implementeret [120] . Med HotRuby kan du bruge ruby-scripts på websider. For at gøre dette skal rubinkode placeres i en blok:
< script type = "text/ruby" > ... </ script >HotRuby vil udpakke det, sende det til et fjernscript til kompilering og derefter vise resultaterne på [121] -siden . Denne implementering tillader adgang fra Ruby til JavaScript-objekter [122] .
Sprog | Implementeringsnavn | Hovedforfattere | Licens |
---|---|---|---|
JavaScript | s-mr [123] | Andrei Formiga | NyBSD |
efterskrift | WPS [124] | Tom Hlavaty | ? |
Assembler til 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 | simpel tilladelig licens |
Prolog | Monash Toy Prolog [128] | Lloyd Allison | ? |
ioctls [129] | Jan Grant | ? | |
kat | Kattetolk [130] | Christopher Diggins | offentligt domæne |
Ordning | BiwaScheme [131] | Yutaka Hara | MIT |
GRUNDLÆGGENDE | Ganske BASIC [132] | Nikko Strøm | gratis proprietær |
Lily | Lily [133] | Bill Orcutt | MIT |
Frem | wForth [134] | K Jacobsen | ? |
PHP | phype [135] | ||
Python 3 | PyPy.js | ? | ? |
Oberon 07 | oberonjs [136] | Vlad Folts | MIT |
Nogle programmeringssprog giver support til at interagere med JavaScript-kode.
Til dato er JavaScript-understøttelse leveret af moderne versioner af alle de mest almindeligt anvendte browsere. Internet Explorer , Opera , Mozilla Firefox , Safari , Google Chrome har fuld understøttelse af 3. udgave ECMA-262. Samtidig forsøgte Mozilla Firefox at implementere understøttelse af den fjerde udgave af specifikationen, og den første browser, hvori ufuldstændig understøttelse af 3.1-specifikationen dukkede op, var Internet Explorer 8 [140] .
Fejl begået af udviklere af populære browsere i implementeringen af specifikationen er normalt mindre [141] . Fra november 2009 har dokumentobjektmodellen mere begrænset understøttelse [142] .
Ifølge skaberen af sproget kan Microsofts understøttelse i Internet Explorer af en af de hurtige JavaScript-motorer , der findes og bruges i andre browsere , føre til fremkomsten af applikationer, der arbejder med tredimensionel grafik , 3D-spil skrevet i JavaScript, brug af JavaScript i opgaver, der tidligere brugte teknologien Adobe Flash [143] .
Regressionstest af browser-overensstemmelse med den tredje udgave af ECMA-262-specifikationen kan udføres [144] [145] ved hjælp af det Google-udviklede værktøj til test af overensstemmelse med ECMAScript-specifikationen Sputnik , som omfatter mere end fem tusinde test cases [146] og blev opkaldt efter det russiske Google-team [146] såvel som sputniktests-webrunner [147] shell skrevet af Yuri Zaitsev eller Google -tjenesten [148] . Testcases inkluderet i Sputnik bliver opdateret i forbindelse med udgivelsen af den femte udgave af ECMA-262-specifikationen, hvilket afspejler ændringer i forhold til dens tidligere udgave [149] .
ECMAScript 5 Conformance Suite [150] er en testpakke udgivet af Microsoft under BSD-licensen [151] for at verificere, at en implementering af ECMAScript-sproget er i overensstemmelse med dens femte udgavespecifikation. Pr. 12. marts 2010 var der 1236 testcases i pakken, den havde version 0.2 alpha og antallet af downloads på tre måneder var 178 [152] .
Mozillas [153] [154] JavaScript Test Suite er tilgængelig til at teste rigtigheden af JavaScript-implementeringer .
JavaScript tillader potentielle forfattere af ondsindet kode at køre den på enhver computer på netværket ved blot at åbne en webside på den. Dette resulterer i to grundlæggende begrænsninger:
Derudover indfører browserleverandører yderligere begrænsninger som reaktion på misbrug, der finder sted. Sådan fremstod især forbuddet mod at åbne et vindue, hvis størrelse på den ene side er mindre end hundrede pixels [155] .
Sårbarheder på tværs af webstederEt almindeligt problem med JavaScript er cross-site scripting eller XSS, en overtrædelse af domænebegrænsningsreglen. XSS-sårbarheder opstår i situationer, hvor en angriber har mulighed for at placere script på en side, der vises til brugeren. I dette tilfælde får scriptet adgang til webstedet med denne brugers rettigheder, hvilket i nogle tilfælde åbner muligheden for at sende fortrolige oplysninger og foretage uønskede transaktioner .
XSS-sårbarheder opstår også på grund af fejl begået af browserudviklere [157] .
En anden type sårbarhed på tværs af websteder er forfalskning af anmodninger på tværs af websteder eller CSRF. Det ligger i angriberens websteds evne til at tvinge brugerens browser til at udføre en uønsket handling på målstedet (for eksempel en bankoverførsel af penge). Dette er muligt, hvis målwebstedet kun er afhængigt af HTTP-cookies eller godkendelsesanmodninger. I dette tilfælde udføres anmodninger initieret af angriberens webstedskode på samme måde som brugeranmodninger, hvis han er autoriseret på målstedet. Et af midlerne til beskyttelse mod CSRF er at udføre autentificering på enhver anmodning, der fører til irreversible konsekvenser. Parsing af HTTP-henvisningen kan også hjælpe .
Misplaceret tillid på klientsidenUdviklere af klientapplikationer, uanset om de bruger JavaScript eller ej, skal være opmærksomme på, at sidstnævnte kan være under kontrol af angribere. Derfor kan enhver kontrol på klientsiden omgås, JavaScript kan enten køre eller ej. Sløret kode kan omvendt manipuleres ; formulardata kan sendes til serveren uden JavaScript- validering ; scripts kan deaktiveres delvist, så for eksempel kan pålidelig beskyttelse mod at gemme billeder ved hjælp af JavaScript ikke implementeres [158] ; det er ekstremt uforsigtigt at indlejre adgangskoden i JavaScript, der kører på klienten, hvor den kan findes af en angriber.
Bugs i browseren, plugins og udvidelserJavaScript giver en grænseflade til en lang række browserfunktioner, hvoraf nogle kan indeholde fejl såsom bufferoverløb . Dette giver dig mulighed for at skrive scripts, der får vilkårlig kode til at blive eksekveret på brugerens system.
Lignende fejl er blevet fundet i almindeligt anvendte browsere, herunder Mozilla Firefox [159] , Internet Explorer [160] og Safari [161] . Når man identificerer potentielt farlige fejl i browseren og har oplysninger om implementerede udnyttelser , anbefaler producenten og sikkerhedseksperter at deaktivere JavaScript før udgivelsen af patchen [162] [163] .
Plugins såsom afspillere , Macromedia Flash og en række ActiveX - komponenter, der er tilgængelige som standard i Internet Explorer, kan også indeholde fejl, der er udnyttet med JavaScript, som det er sket før [164] [165] .
Mozilla Firefox-udvidelser er ikke isoleret fra hinanden: en udvidelse kan rette en anden, som kan udnyttes af angribere. På SecurityByte & Owasp AppSec Asia 2009 demonstrerede Roberto Suggi Liverani og Nick Freeman tre udnyttelser i populære Firefox-udvidelser, downloadet over 30 millioner gange fra webstedet [166] .
Sandbox implementeringsfejlBrowsere kan køre JavaScript uden for sandkassen med de nødvendige privilegier til for eksempel at oprette og slette filer. Sådanne privilegier bør dog ikke gives til kode fra nettet.
Ukorrekte rettigheder til JavaScript fra nettet har været årsagen til sårbarheder i både Internet Explorer [167] og Mozilla Firefox [168] .
Microsoft Windows tillader JavaScript-filer at køre som almindelige programmer uden at være sandboxed. Dette gør det muligt at oprette trojanske heste [169] .
JavaScript | |
---|---|
Ideer | |
Kompilere | |
Motorer | |
Biblioteker og rammer | |
Redaktører | |
Værktøjer |
|
Relaterede teknologier | |
Mennesker | |
Kategori |
ECMAScript | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Dialekter |
| ||||||||||||
Motorer ( sammenligning ) | |||||||||||||
Rammer , biblioteker |
| ||||||||||||
Mennesker | |||||||||||||
Andet |
|
Programmeringssprog | |
---|---|
|
Web og hjemmesider | |
---|---|
globalt | |
Lokalt | |
Typer af websteder og tjenester |
|
Oprettelse og vedligeholdelse | |
Typer af layout, sider, websteder | |
Teknisk | |
Markedsføring | |
Samfund og kultur |