Javascript
| javascript | ||
|---|---|---|
|
| ||
|
| ||
| ? | ||
| Generel information | ||
| Almindelige udvidelser |
.js | |
| Paradigme | Multiparadigme , funktionel programmering , [ 1 ] prototypebaseret programmering , imperativ , fortolket ( scripting ) | |
| Dukkede op i | 4. december 1995 | |
| Designet af | Netscape Communications , Mozilla Foundation | |
| Seneste stabile version | ECMAScript 2021 (01. juni 2021 (1 år, 4 måneder og 15 dage)) | |
| type system | svag, dynamisk, and | |
| implementeringer | SpiderMonkey , Rhino , KJS , JavaScriptCore , V8 , Chakra . | |
| dialekter | ECMAScript | |
| påvirket af | Java , Perl , Self , Python , C , Scheme | |
| har påvirket | ObjectiveJ, JScript .NET, TIScript | |
JavaScript (almindeligvis forkortet JS ) er et fortolket programmeringssprog , dialekt af ECMAScript- standarden . Det er defineret som objektorienteret , [ 2 ] prototype- baseret , imperativ, svagt-type og dynamisk .
Det bruges primært på klientsiden , implementeret som en del af en webbrowser , der tillader brugergrænsefladeforbedringer og dynamiske websider [ 3 ] og JavaScript på serversiden ( Server-side JavaScript eller SSJS ). Dets brug i applikationer uden for nettet , for eksempel i PDF -dokumenter , desktop-applikationer (for det meste widgets ) er også betydelig.
Siden 2012 har alle moderne browsere fuldt ud understøttet ECMAScript 5.1, en version af JavaScript. Ældre browsere understøtter mindst ECMAScript 3. Den sjette udgave blev udgivet i juli 2015. [ 4 ]
JavaScript blev designet med syntaks svarende til C++ og Java , [ 5 ] [ 6 ] selvom det overtager navne og konventioner fra Java-programmeringssproget. Java og JavaScript har dog forskellige semantikker og formål. Deres forhold er rent kommercielt, efter købet af skaberen af Java (Sun Microsystems) fra Nestcape Navigator (skaber af LiveScript) og ændringen af navn på programmeringssproget.
Alle moderne browsere fortolker JavaScript-kode, der er indlejret i websider. For at interagere med en webside er JavaScript-sproget forsynet med en implementering af Document Object Model (DOM). Javascript er det eneste programmeringssprog, som browsere forstår indbygget.
Traditionelt er det blevet brugt i HTML -websider til at udføre operationer og kun inden for rammerne af klientapplikationen uden adgang til serverfunktioner . Det er i øjeblikket meget brugt til at sende og modtage information fra serveren sammen med hjælp fra andre teknologier såsom AJAX . JavaScript fortolkes af brugeragenten, da erklæringerne downloades sammen med HTML -koden .
Siden udgivelsen af ECMAScript 1-standarden i juni 1997 har der været version 2, 3 og 5, som er den mest udbredte i dag (version 4 blev droppet [ 7 ] ). I juni 2015 blev ECMAScript 6-versionen lukket og offentliggjort. [ 8 ]
Historie
JavaScripts fødsel
JavaScript blev oprindeligt udviklet af Brendan Eich fra Netscape under navnet Mocha , som senere blev omdøbt til LiveScript , og til sidst blev JavaScript. Navneændringen faldt nogenlunde sammen med det tidspunkt, hvor Netscape tilføjede Java-teknologistøtte til sin Netscape Navigator-webbrowser i version 2002 i december 1995. Navngivningen skabte forvirring, hvilket gav indtryk af, at sproget er en forlængelse af Java. , og blev betragtet af mange som en marketingstrategi for Netscape for at opnå prestige og innovere inden for nye webprogrammeringssprog. [ 9 ] [ 10 ]
"JAVASCRIPT" er et registreret varemærke tilhørende Oracle Corporation . [ 11 ] Det bruges under licens af produkter skabt af Netscape Communications og nuværende enheder såsom Mozilla Foundation . [ 12 ] [ 13 ]
Microsoft kaldte sin JavaScript-dialekt " JScript ", for at undgå brandingproblemer. JScript blev vedtaget i version 3.0 af Internet Explorer, udgivet i august 1996, og inkluderede Effect 2000- understøttelse af datofunktioner, en afvigelse fra dem, der var baseret på det tidspunkt. Dialekterne kan virke så ens, at udtrykkene "JavaScript" og "JScript" ofte bruges i flæng, men JScript-specifikationen er på mange måder uforenelig med ECMA-specifikationen.
For at undgå disse inkompatibiliteter designede World Wide Web Consortium standarden Document Object Model (DOM eller Document Object Model på spansk), som inkorporerer Konqueror , version 6 af Internet Explorer og Netscape Navigator , Opera version 7, Mozilla Application Suite og Mozilla Firefox fra dens første version. [ henvisning nødvendig ]
I 1997 foreslog forfatterne [ 14 ] JavaScript at blive vedtaget som en standard af European Computer Manufacturers' Association ECMA , som trods sit navn ikke er europæisk, men internationalt, baseret i Genève. I juni 1997 blev den vedtaget som en ECMA-standard under navnet ECMAScript . Kort efter også som ISO- standard .
JavaScript på serversiden
Netscape introducerede en server-side scripting implementering med Netscape Enterprise Server , udgivet i december 1994 (kort efter udgivelsen af JavaScript til webbrowsere). [ 15 ] [ 16 ] Fra midten af 2000'erne har der været en udbredelse af JavaScript-implementeringer på serversiden. Node.js er et af de bemærkelsesværdige eksempler på server-side JavaScript, der bruges i større projekter. [ 17 ] [ 18 ]
Senere udvikling
JavaScript er blevet et af de mest populære og udbredte programmeringssprog på internettet. Til at begynde med afviste mange udviklere sproget, fordi dets tilsigtede publikum blandt andet bestod af artikeludgivere og andre hobbyfolk. [ 19 ] Ankomsten af Ajax bragte JavaScript tilbage til fremtrædende plads og tiltrak sig opmærksomhed fra mange andre programmører. Som et resultat af dette var der en udbredelse af et sæt rammer og biblioteker af generelt omfang, forbedring af JavaScript-programmeringspraksis og øget brug af JavaScript uden for webbrowsere , som det ses med udbredelsen af JavaScript-miljøer på websiden. server . I januar 2009 blev CommonJS- projektet lanceret med det formål at specificere et bibliotek til brug for almindelige opgaver primært til udvikling uden for webbrowseren. [ 20 ]
I juni 2015 blev ECMAScript 6 -standarden lukket og offentliggjort [ 21 ] [ 22 ] med uregelmæssig understøttelse mellem browsere [ 23 ] og som giver JavaScript med avancerede funktioner, som manglede og er almindeligt brugt i JavaScript. andre sprog, f.eks. som moduler til kodeorganisering, ægte klasser til objektorienteret programmering , pileudtryk, iteratorer, generatorer eller løfter til asynkron programmering.
Version 7 af ECMAScript er kendt som ECMAScript 2016, [ 24 ] og er den seneste tilgængelige version, udgivet i juni 2016. Det er den første version, der bruger en ny årlig udgivelsesprocedure og udviklingsproces. [ 25 ]
Funktioner
Følgende funktioner er fælles for alle implementeringer, der er i overensstemmelse med ECMAScript-standarden, medmindre du udtrykkeligt angiver andet.
Imperativ og struktureret
JavaScript understøtter meget af programmeringsstrukturen i C (for eksempel sætninger if, loops for, sætninger switchosv.). Med én advarsel, delvist: I C er variabler scoped til den blok, hvori de blev defineret; JavaScript understøtter dog ikke dette, da omfanget af variabler er det for den funktion, hvori de blev erklæret. Dette ændres med ECMAScript 2015-udgivelsen, da den tilføjer understøttelse af blokomfang via nøgleordet . Som i C skelner JavaScript mellem udtryk og udsagn. En syntaktisk forskel med hensyn til C er den automatiske indsættelse af semikolon, det vil sige i JavaScript kan de semikoloner, der afslutter en sætning, udelades. [ 26 ]
let
Dynamisk
- dynamisk skrivning
- Som i de fleste scriptsprog er typen knyttet til værdien, ikke variablen. For eksempel kan en variabel
xpå én gang være bundet til et tal og senere vende tilbage til en streng . JavaScript understøtter flere måder at kontrollere typen af et objekt på, herunder duck -type . [ 27 ] En måde at finde ud af det på er gennem søgeordettypeof.
- objektivt
- JavaScript består næsten udelukkende af objekter . Objekter i JavaScript er associative arrays , forbedret ved inkludering af prototyper (se nedenfor). Objektegenskabsnavne er nøgler af typen string:
obj.x = 10ogobj['x'] = 10er ækvivalente, idet punktnotationen er syntaktisk sukker . Egenskaber og deres værdier kan oprettes, ændres eller slettes under kørsel. De fleste egenskaber ved et objekt (og dem, der er inkluderet i den prototypiske arvekæde) kan opregnes via loop-sætningenfor... in. JavaScript har et lille antal foruddefinerede objekter såsomFunctionogDate.
- Runtime evaluering
- JavaScript inkluderer muligheden
evalfor at evaluere udtryk udtrykt som strenge under kørsel. Af denne grund anbefales det, atevaldet bruges med forsigtighed, og at du vælger at bruge funktionenJSON.parse()så meget som muligt, da det kan være meget mere sikkert.
Funktionel
- Førsteklasses funktioner
- Funktioner kaldes ofte førsteklasses borgere; de er objekter i sig selv. Som sådan har de egenskaber og metoder, såsom
.call()og.bind(). [ 28 ] En indlejret funktion er en funktion defineret i en anden. Dette oprettes hver gang den ydre funktion kaldes. Desuden danner hver oprettet funktion en lukning ; er resultatet af evaluering af et omfang, der indeholder en eller flere variable afhængigt af et andet ydre omfang, inklusive konstanter, lokale variabler og argumenter for den kaldende ydre funktion. Resultatet af evalueringen af denne lukning er en del af den interne tilstand for hvert funktionsobjekt, selv efter at den ydre funktion har afsluttet sin evaluering. [ 29 ]
Prototypisk
- prototyper
- JavaScript bruger prototyper i stedet for klasser til brug af arv . [ 30 ] Det er muligt at efterligne mange af de funktioner, som klasser leverer i traditionelle objektorienterede sprog ved at lave prototyper i JavaScript. [ 31 ]
- Fungerer som objektkonstruktører
- Funktioner opfører sig også som konstruktører. Præfiks et funktionskald med nøgleordet
newopret en ny forekomst af en prototype, som arver konstruktørens egenskaber og metoder (inklusive prototypens egenskaberObject). [ 32 ] ECMAScript 5 leverer metodenObject.create, der tillader eksplicit oprettelse af en instans uden automatisk at skulle arve fra objektprototypen (i ældre miljøer kan det oprettede objekts prototype fremstå somnull). [ 33 ] Konstruktøregenskabenprototypebestemmer det objekt, der bruges til den interne prototype af nyoprettede objekter. Nye metoder kan tilføjes ved at ændre prototypen på det objekt, der bruges som konstruktør. Foruddefinerede konstruktører i JavaScript, somArrayuObject, har også prototyper, der kan ændres. Selvom dette er muligt, anses det for dårlig praksis at ændre prototypen af,Objectda de fleste objekter i Javascript arver objektets metoder og egenskaberprototype, objekter, der kan forvente, at de ikke er blevet ændret. [ 34 ]
Andre funktioner
- Runtime miljø
- JavaScript afhænger typisk af det miljø, det kører i (for eksempel i en webbrowser ) for at levere objekter og metoder, hvormed scripts kan interagere med "omverdenen". Faktisk afhænger det af miljøet at kunne give mulighed for at inkludere eller importere scripts (for eksempel i HTML via tagget
<script>). (Dette er ikke en sprogfunktion, men er fælles for de fleste JavaScript-implementeringer.)
- variadiske funktioner
- Et ubestemt antal parametre kan overføres til funktionen. Funktionen kan få adgang til dem gennem parametrene eller også gennem det lokale objekt
arguments. Variadiske funktioner kan også oprettes ved hjælp af.apply().
- Fungerer som metoder
- I modsætning til mange objektorienterede sprog er der ingen forskel mellem funktionsdefinition og metodedefinition . Snarere sker skelnen under funktionskaldet; en funktion kan kaldes som en metode. Når en funktion kaldes som en metode til et objekt
this, repræsenterer nøgleordet , som er en variabel lokal for funktionen, det objekt, der kaldte funktionen.
- Arrays og den bogstavelige definition af objekter
- Ligesom mange scriptsprog kan arrays og objekter ( associative arrays på andre sprog) oprettes med en stenografisyntaks. Faktisk danner disse bogstaver grundlaget for JSON -dataformatet .
- Regelmæssige udtryk
- JavaScript understøtter også regulære udtryk på samme måde som Perl , som giver en kortfattet og kraftfuld syntaks til tekstmanipulation, der er mere sofistikeret end funktioner indbygget i strengobjekter. [ 35 ]
Producentspecifikke udvidelser
JavaScript er officielt under Mozilla Foundation -organisationen , og nye sprogfunktioner tilføjes med jævne mellemrum. Det er dog kun nogle JavaScript-motorer, der understøtter disse funktioner:
- Egenskaberne
getogset(også understøttet af WebKit, Opera, [ 36 ] ActionScript og Rhino). [ 37 ] - Betingede klausuler
catch. - Iterator-protokol overtaget fra Python .
- Coroutines også adopteret fra Python.
- Generering af lister og udtryk ved forståelse også overtaget fra Python.
- Indstil omfanget til at blokere via nøgleordet
let. - Destrukturering af arrays og objekter (begrænset form for mønstertilpasning).
- Konkrete udtryk i funktioner (funktion(args) udtr).
- ECMAScript til XML (E4X), en udvidelse, der tilføjer native XML-understøttelse til ECMAScript.
Syntaks og semantik
den seneste version af sproget er ECMAScript 2016 udgivet den 17. juni 2016. [ 38 ]
Simple eksempler
Variabler i JavaScript er defineret ved hjælp af var nøgleordet : [ 39 ]
var x ; // definerer variablen x, selvom den ikke har nogen værdi tildelt som standard
var y = 2 ; // definer variablen y og tildel værdien 2 til den
Overvej kommentarerne i eksemplet ovenfor, som er indledt af 2 skråstreger foran.
Der er ingen I/O- funktioner inkluderet i sproget; runtime-miljøet leverer det allerede. ECMAScript-specifikationen i sin 5.1-udgave nævner: [ 40 ]
...der er faktisk ingen bestemmelser i denne specifikation for ekstern datainput eller -output for beregnede resultater.
Imidlertid har de fleste runtime-miljøer et objekt kaldet [ 41 ]console , som kan bruges til at udskrive af fejlfindingskonsollens outputstrøm. Her er et simpelt program, der udskriver "Hej verden!":
konsol . log ( "Hej verden!" );
En rekursiv funktion :
function factorial ( n ) {
if ( n === 0 ) {
return 1 ;
}
returner n * fakultet ( n - 1 );
}
Eksempler på anonym funktion (eller lambdafunktion ) og en lukning:
var displayClosure = function () {
var count = 0 ;
return function () {
return ++ count ;
};
}
var inc = displayClosure ();
inc (); // returnerer 1
inc (); // returnerer 2
inc (); // retur 3
Selvpåkaldende udtryk gør det muligt for funktioner at overføre variabler til det efter parameter inden for deres egne lukninger.
var v ;
v = 1 ;
var getValue = ( function ( v ) {
return function () { return v ;};
}( v ));
v = 2 ;
getValue (); // 1
Mere avancerede eksempler
Den følgende kode viser forskellige funktioner i JavaScript.
/* Find det mindste fælles multiplum (LCM) af to tal */
function LCMCalculator ( x , y ) { // constructor function
var checkInt = function ( x ) { // indre funktion
if ( x % 1 !== 0 ) {
throw new TypeError ( x + " er ikke et heltal" ); // smid en undtagelse
}
returner x ;
};
dette . a = checkInt ( x ) // semikolon er valgfrit
dette . b = checkInt ( og );
}
// Prototypen af objektforekomsterne, der er oprettet af konstruktøren, er egenskaben "prototype" for konstruktøren.
LCMC-beregner . prototype = { // objekt defineret som literal
constructor : LCMCalculator , // når vi omtildeler en prototype, sætter vi korrekt dens constructor-egenskab
gcd : function () { // metode, der beregner den største fælles faktor
// Euklids algoritme:
var a = Matematik . abs ( dette . a ), b = Matematik . abs ( dette . b ), t ;
if ( a < b ) {
// swap variable
t = b ;
b = a ;
a = t ;
}
mens ( b !== 0 ) {
t = b ;
b = a % b ;
a = t ;
}
// Vi behøver kun at beregne GCF én gang, så vi 'redefinerer' denne metode.
// (Ikke rigtig en tilsidesættelse – den er defineret på selve instansen, så
// this.gcd refererer til denne 'tilsidesættelse' i stedet for LCMCalculator.prototype.gcd).
// Også 'gcd' === "gcd", this['gcd'] === this.gcd
this [ 'gcd' ] = function () {
return a ;
};
vende tilbage til ;
},
// Objektegenskabsnavne kan angives med strenge afgrænset med enkelte anførselstegn (') eller dobbelte anførselstegn (“).
"lcm" : function () {
// Variablenavne kolliderer ikke med objektegenskaber. For eksempel: |lcm| er ikke |this.lcm|.
// Brug ikke |this.a * this.b| for at undgå problemer med flydende kommaberegninger.
var lcm = dette . til / dette . gcd () * dette . b ;
// Vi skal kun beregne LCM én gang, så vi "omdefinerer" denne metode.
dette . lcm = funktion () {
return lcm ;
};
retur lcm ;
},
toString : function () {
return "LCMCalculator: a = " + this . a + ", b = " + dette . b ;
}
};
// Vi definerer en generisk funktion til at udskrive et resultat;
denne implementering virker kun i webbrowsers funktionsoutput ( x ) { document . krop . appendChild ( dokument . createTextNode ( x )); dokument . krop . appendChild ( dokument . createElement ( 'br' )); }
// Bemærk: .map()- og .forEach()-metoderne for Array-prototypen er defineret i JavaScript 1.6.
// Disse metoder bruges her til at demonstrere sprogets iboende funktionelle karakter.
[[ 25 , 55 ], [ 21 , 56 ], [ 22 , 58 ], [ 28 , 56 ]]. map ( funktion ( par ) { // bogstavelig konstruktion af en Array + mapping funktion.
returner ny LCMCalculator ( par [ 0 ], par [ 1 ]);
}). sort ( function ( a , b ) { // sorter samlingen ved hjælp af denne funktion
returner a . lcm () - b . lcm ();
}). forEach ( function ( obj ) {
output ( obj + ", gcd = " + obj . gcd () + ", lcm = " + obj . lcm ());
});
Følgende eksempel viser det output, der skal vises i et browservindue.
LCMC-beregner: a = 28, b = 56, gcd = 28, lcm = 56
LCMC-beregner: a = 21, b = 56, gcd = 7, lcm = 168
LCMC-beregner: a = 25, b = 55, gcd = 5, lcm = 275
LCMC-beregner: a = 22, b = 58, gcd = 2, lcm = 638
Brug på websider
Den mest almindelige brug af JavaScript er at skrive funktioner, der er indlejret i HTML-sider, og som interagerer med sidens Document Object Model (DOM). Nogle simple eksempler på denne brug er:
- Upload nyt indhold til siden eller send data til serveren via AJAX uden at genindlæse siden (for eksempel kan et socialt netværk tillade brugeren at sende statusopdateringer uden at forlade siden).
- Animer sideelementer, få dem til at forsvinde, ændre størrelse, flyt osv.
- Interaktivt indhold, for eksempel spil og lyd- og videoafspilning.
- Validering af inputværdierne for en webformular for at sikre, at de er acceptable, før de sendes til serveren.
- Overførsel af information om brugernes læsevaner og browsingaktiviteter til forskellige hjemmesider. Websider gør dette ofte til webanalyse, annoncesporing, personalisering eller andre formål. [ 42 ]
Fordi JavaScript-kode kan udføres lokalt i brugerens browser (i stedet for på en ekstern server), kan browseren reagere hurtigt på brugerhandlinger, hvilket gør en applikation mere responsiv. På den anden side kan JavaScript-kode registrere brugerhandlinger, som HTML alene ikke kan, såsom tastetryk. Applikationer som Gmail drager fordel af dette: Det meste af brugergrænsefladelogikken er skrevet i JavaScript, hvilket sender anmodninger til serveren (f.eks. indholdet af en e-mail-meddelelse). Den voksende tendens til brug af Ajax-programmering udnytter på samme måde denne teknik.
En JavaScript-motor (også kendt som en JavaScript-fortolker eller JavaScript-implementering) er en fortolker, der fortolker JavaScript-kildekode og udfører script i overensstemmelse hermed. Den første JavaScript-motor blev skabt af Brendan Eich hos Netscape Communications Corporation til Netscape Navigator-webbrowseren. Motoren, kaldet SpiderMonkey, er implementeret i C. Den er siden blevet opdateret (i JavaScript 1.5) til at overholde ECMA-262 udgave 3. Rhino-motoren, der primært er skabt af Norris Boyd (tidligere af Netscape, nu hos Google) er en implementering af JavaScript i Java . Rhino er ligesom SpiderMonkey ECMA-262 edition 3 kompatibel.
En webbrowser er langt det mest almindelige hostingmiljø for JavaScript. Webbrowsere opretter ofte ikke-native, runtime-afhængige objekter til at repræsentere Document Object Model (DOM) i JavaScript. Webserveren er et andet almindeligt servicemiljø. En JavaScript-webserver eksponerer typisk sine egne objekter for at repræsentere HTTP-anmodnings- og svarobjekter, som et JavaScript-program derefter kunne udspørge og manipulere for dynamisk at generere websider.
Fordi JavaScript er det eneste sprog, som de fleste populære browsere deler understøttelse af, er det blevet et sprog, som mange frameworks på andre sprog kompilerer til, selvom JavaScript ikke er designet til sådanne formål. [ 43 ] På trods af de præstationsbegrænsninger, der ligger i dets dynamiske natur, har den øgede hastighed af JavaScript-motorer gjort dette sprog til et overraskende gennemførligt kompileringsmiljø.
Script eksempel
Her er et kort eksempel på en webside (der overholder standarderne for HTML5 -standarden ), der bruger JavaScript til DOM -håndtering :
<!DOCTYPE html>
< html >
< head >
< meta charset = "utf-8" >
< title > Simpelt eksempel </ title >
</ head >
< body >
< h1 id = "header" > Dette er JavaScript </ h1 >
< script >
dokument . krop . appendChild ( document . createTextNode ( 'Hej verden!' ));
var h1 = dokument . getElementById ( 'header' ); // indeholder referencen til <h1>-tagget
h1 = document . getElementsByTagName ( 'h1' )[ 0 ]; // adgang til det samme <h1> element
</ script >
< noscript > Din browser understøtter ikke JavaScript, eller JavaScript er deaktiveret. </ noscript >
</ body >
</ html >
Kompatibilitetsovervejelser
Fordi JavaScript kører i så mange forskellige miljøer, er en vigtig del af test og fejlretning at teste og verificere, at din JavaScript-kode fungerer korrekt i flere browsere. DOM-grænsefladen til at få adgang til og manipulere websider er ikke en del af ECMAScript-standarden eller JavaScript selv. DOM er defineret af standardiseringsbestræbelserne fra W3C , en uafhængig organisation. I praksis adskiller forskellige browseres implementeringer af JavaScript sig både fra hinanden og fra standardens standarder.
For at imødegå disse forskelle kan JavaScript-forfattere have været i stand til at skrive standardkompatibel kode, som også ville køre korrekt i de fleste browsere, eller hvis det ikke, i det mindste skrive kode, der er i stand til at kontrollere tilstedeværelsen af visse browserfunktioner, og at den opfører sig anderledes, hvis det er sagt. funktionalitet er ikke tilgængelig. [ 44 ] Der er tilfælde, hvor to browsere kan implementere den samme funktion, men med forskellig adfærd, en kendsgerning, der kan hjælpe programmører til at opdage, hvilken browser der kører i det øjeblik, og dermed ændre adfærden i dit skrift, så det matcher. [ 45 ] [ 46 ] Programmører bruger også ofte biblioteker eller værktøjer, der tager højde for forskellene mellem browsere.
Desuden virker scripts muligvis ikke for nogle brugere. For eksempel kan en bruger:
- Brug af en ældre browser uden fuld DOM API-understøttelse,
- Brug en PDA- eller mobiltelefonbrowser, der ikke kan køre JavaScript
- Få JavaScript-udførelse deaktiveret, som en sikkerhedsforanstaltning,
- Brug af stemmebrowser på grund af for eksempel synshandicap.
For at understøtte disse brugere opretter webudviklere ofte sider, der er fejltolerante baseret på brugeragent (browsertype), der ikke understøtter JavaScript. Især siden skulle stadig være nyttig uden de ekstra funktioner, som JavaScript ville have tilføjet. En alternativ tilgang, som mange finder at foretrække, er først at skabe indhold ved hjælp af teknologier, der fungerer i alle browsere, og forbedre indholdet for brugere, der har aktiveret JavaScript.
Tilgængelighed
Forudsat at brugeren ikke har deaktiveret kørsel af JavaScript-kode, bør JavaScript på klientsiden skrives både med det formål at forbedre oplevelserne for besøgende med visuelle eller fysiske handicap, og for at undgå at skjule information fra disse besøgende. [ 47 ]
Skærmlæsere , der bruges af blinde og svagtseende, kan tages i betragtning af JavaScript og dermed kunne tilgå og læse DOM-elementerne på siden. Skrevet HTML-kode skal være så kortfattet, navigerbar og semantisk rig som muligt, uanset om JavaScript udføres eller ej.
JavaScript bør ikke være fuldstændig afhængig af browser-mushændelser og bør være tilgængelig for brugere, der ikke ønsker at bruge musen (computeren) til at navigere eller som vælger kun at bruge tastaturet. Der er enhedsuafhængige hændelser som onfocusog onchangesom er at foretrække i de fleste tilfælde. [ 47 ]
JavaScript må ikke bruges til at skabe forvirring eller desorientering hos webbrugeren. For eksempel er ændring eller deaktivering af normal browserfunktionalitet, såsom at ændre den måde, hvorpå knappen Naviger tilbage eller opdateringshændelsen opfører sig, praksis, som generelt bedst undgås. På samme måde reducerer udløsning af hændelser, som brugeren måske ikke er opmærksom på, brugerens følelse af kontrol og forårsager uventede ændringer i sidens indhold. [ 48 ]
Ofte bliver processen med at levere en kompleks webside med den højest mulige grad af tilgængelighed et ikke-trivielt problem, hvor mange spørgsmål ender med at blive debatteret og givet mening, hvilket kræver alles engagement til slutningen. Brugeragenter og hjælpeteknologier til mennesker med handicap udvikler sig dog konstant, og nye retningslinjer og informationer bliver fortsat lagt ud på nettet. [ 47 ]
Sikkerhed
JavaScript og DOM giver programmører mulighed for at misbruge det til at introducere scripts, der udfører kode med ondsindet indhold uden brugerens samtykke, og dermed kompromittere brugersikkerheden.
Browserudviklere tager højde for denne risiko ved at bruge to begrænsninger. For det første kører scripts i en sandkasse , hvor kun web-relaterede handlinger kan udføres, ikke generelle programmeringsopgaver såsom filoprettelse. For det andet er det begrænset af den samme oprindelsespolitik: scripts fra et websted har ikke adgang til information sendt til et andet websted (fra et andet domæne), såsom brugernavne, adgangskoder eller cookies. De fleste JavaScript-sikkerhedsfejl er relateret til overtrædelser af en af disse to begrænsninger.
Der er projekter som AdSafe eller Secure ECMA script (SES), der giver højere niveauer af sikkerhed, især i kode oprettet af tredjeparter (såsom annoncer). [ 49 ] [ 50 ]
Content Secure Policy (CSP) er den primære metode, der er planlagt til at sikre, at kun betroet kode kan udføres på en webside.
Sårbarheder på tværs af websteder
Et almindeligt sikkerhedsproblem i JavaScript er cross-site scripting eller XSS, en overtrædelse af samme oprindelsespolitik. XSS-sårbarheder gør det muligt for en angriber at injicere JavaScript-kode på websider, som brugeren besøger. En sådan hjemmeside kunne være en bank, hvor angriberen kan få adgang til bankapplikationen med ofrets privilegier, som kunne afsløre hemmelige oplysninger eller overføre penge uden ofrets tilladelse. En løsning på XSS-sårbarheder er at bruge HTML-escape , når du viser information fra upålidelige kilder.
Nogle browsere inkluderer delvis beskyttelse mod reflekterede XSS-angreb (angriberen er i den samme webanmodning). Angriberen giver en URL inklusive skadelig kode. Men selv browserbrugere er sårbare over for andre XSS-angreb, såsom dem, hvor skadelig kode er gemt i en database. Kun det korrekte design af webapplikationer på serversiden kan totalt forhindre XSS. XSS-sårbarheder kan også opstå på grund af kørselsfejl fra browserudviklere. [ 51 ]
En anden sårbarhed er forfalskning af anmodninger på tværs af websteder eller CSRF. I CSRF snyder det angribende websteds kode offerets browser, hvilket gør det muligt for angriberen at fremsætte anmodninger på vegne af offeret, hvilket gør det umuligt for målapplikationen (f.eks. en bank, der foretager en pengeoverførsel) at vide, om anmodningen blev fremsat frivilligt af brugeren eller af et CSRF-angreb.
Angrebet virker, fordi, hvis målwebstedet kun bruger cookies til at godkende offeranmodninger, vil anmodninger, der er initieret af angriberens kode, have samme legitime adgangsoplysninger som brugerinitierede anmodninger.
Generelt er løsningen på CSRF at indføre et skjult formularfelt, hvis værdi bruges til at udføre autentificering, og ikke kun via cookies, på anmodninger, der kan have varige effekter. Det kan også hjælpe at tjekke HTTP-henvisnings-headeren.
"JavaScript-kapring" er en type CSRF-angreb, hvor et <script>-tag på angriberens websted udnytter en sårbarhed på siden på ofrets websted, der får den til at returnere private oplysninger i form af JSON- eller JavaScript-kode. Mulige løsninger er:
- at der kræves et autentificeringstoken i parametrene for POST- og GET-anmodningerne for de anmodninger, der kræver returnering af private brugeroplysninger.
- brug POST og GET aldrig for anmodninger, der returnerer private oplysninger
Udviklingsværktøjer
I JavaScript bliver det nødvendigt at have en debugger, når man udvikler store, ikke-trivielle applikationer. Da der kan være implementeringsforskelle mellem forskellige browsere (især med hensyn til DOM), er det nyttigt at have adgang til en debugger for hver af de browsere, som vores webapplikation vil målrette mod. [ 52 ]
Webdebuggere er tilgængelige til Internet Explorer, Firefox, Safari, Google Chrome og Opera. [ 53 ]
Der er tre debuggere tilgængelige til Internet Explorer : Microsoft Visual Studio er den mest avancerede af de tre, tæt fulgt af Microsoft Script Editor (en komponent i Microsoft Office ) [ 54 ] og endelig Microsoft Script Debugger, som er meget mere grundlæggende end den anden to, selvom det er gratis. Den gratis Microsoft Visual Web Developer Express IDE tilbyder en begrænset version af JavaScript-fejlfindingsfunktionen i Microsoft Visual Studio. Internet Explorer har inkluderet udviklerværktøjer siden version 8 (vises ved at trykke på F12-tasten). Webapplikationer i Firefox kan fejlsøges ved hjælp af Firebug -tilføjelsen eller den gamle Venkman-debugger. Firefox har også en grundlæggende fejlkonsol indbygget, som logger og evaluerer JavaScript. Det logger også CSS- fejl og advarsler. Opera inkluderer et sæt værktøjer kaldet Dragonfly. [ 55 ] WebKits Web Inspector inkluderer en JavaScript debugger [ 56 ] brugt i Safari , sammen med en ændret version af Google Chrome .
Der er nogle hjælpeværktøjer til fejlfinding, også skrevet i JavaScript og bygget til at køre på nettet. Et eksempel er JSLint- programmet , udviklet af Douglas Crockford , som har skrevet meget om sproget. JSLint analyserer JavaScript-kode, så den er i overensstemmelse med et sæt standarder og retningslinjer for at sikre korrekt funktionalitet og vedligeholdelse.
Se også
Referencer
- ↑ Douglas Crockford om Functional JavaScript (2:49): "[JavaScript] er det mest populære funktionelle sprog i verden. JavaScript er og har altid været, i det mindste siden [version] 1.2, et funktionelt programmeringssprog."
- ^ "Arkiveret kopi" . Arkiveret fra originalen den 12. april 2015 . Hentet 2010-11-23 .
- ↑ M. Domínguez-Dorado,. Al programmering. nr. 12. Sider. 48-51. Redaktionel Iberprensa (Madrid). DL M-13679-2004. September 2005. Databaser på klientsiden med JavaScript DB .
- ^ "JavaScript" . Mozilla Developer Network . Hentet 16. september 2016 .
- ↑ «Om JavaScript - JavaScript | MDN» . developer.mozilla.org (på amerikansk engelsk) . Hentet 4. juli 2022 .
- ^ "Introduktion" . web.stanford.edu . Hentet 4. juli 2022 .
- ↑ Eich, Brendan (13. august 2008). ECMAScript Harmony . Hentet 22. juli 2015 .
- ↑ campusMVP (19. juni 2015). "ECMAScript 6 er nu en lukket standard" . Hentet 22. juli 2015 .
- ↑ Programmeringssprog, der bruges på internettet og World Wide Web (WWW) (spansk)
- ↑ JavaScript: The Definitive Guide, 6. udgave
- ↑ http://tsdr.uspto.gov/#caseNumber=75026640&caseType=SERIAL_NO&searchType=statusSearch
- ↑ Oracle-varemærker .
- ↑ "Om JavaScript " . Hentet 29. august 2013 . "JavaScript er et varemærke eller registreret varemærke tilhørende Oracle i USA og andre lande."
- ↑ Netscape pressemeddelelse (spansk)
- ↑ "Kapitel 2: Kom godt i gang" . Server Side JavaScript Guide . Netscape Communications Corporation. 1998 . Hentet 2012-04-25 .
- ^ Mike Morgan (1996). "Kapitel 6: Netscape Internet Application Framework" . Brug af Netscape™ LiveWire™, Special Edition . At. Arkiveret fra originalen den 21. december 2012 . Hentet 19. maj 2013 .
- ↑ "Server-Side Javascript: Back With a Vengeance" . Læs Skriv Web . 17. december 2009. Arkiveret fra originalen 2. juni 2012 . Hentet 28. maj 2012 .
- ^ "Nodes mål er at give en nem måde at bygge skalerbare netværksprogrammer på" . Om Node.js . Joyent.
- ↑ "JavaScript: Verdens mest misforståede programmeringssprog" . crockford.com . Hentet 19. maj 2009 .
- ↑ Kris Kowal (1. december 2009). "CommonJS-indsats sætter JavaScript på vej mod verdensherredømme" . Ars Technica . Conde Nast Publikationer . Hentet 18. april 2010 .
- ↑ ECMA International (juni 2015). "Standard ECMA-262 6. udgave" .
- ↑ campusMVP (19. juni 2015). "ECMAScript 6 er allerede en lukket standard" . Hentet 22. juli 2015 .
- ^ "ECMAScript 6 browserkompatibilitetstabel (engelsk)" .
- ↑ ECMA International (juni 2016). "Standard ECMA-262 7. udgave" .
- ↑ ECMA International (juni 2016). "ECMAScript 2016 sprogspecifikation" .
- ↑ Flanagan, 2006 , s. 16.
- ↑ Flanagan, 2006 , s. 176-178.
- ↑ Egenskaber for funktionsobjektet
- ↑ Flanagan, 2006 , s. 141.
- ^ "Arv og prototypekæden" . Mozilla Developer Network . Mozilla . Hentet 6. april 2013 .
- ^ Herman, David (2013). Effektivt Javascript . Addison-Wesley. s. 83. ISBN 9780321812186 .
- ^ Haverbeke, Marjin (2011). Veltalende Javascript . Ikke Starch Press. pp. 95-97 . ISBN 9781593272821 .
- ↑ Katz, Yehuda. "Forståelse af "prototyper" i JavaScript" . Hentet 6. april 2013 .
- ^ Herman, David (2013). Effektivt Javascript . Addison-Wesley. pp. 125-127. ISBN 9780321812186 .
- ↑ Haverbeke, Marijn (2011). Veltalende JavaScript . Ikke Starch Press. pp. 139-149 . ISBN 978-1593272821 .
- ↑ Robert Nyman, Getters And Setters With JavaScript – Code Samples And Demos , offentliggjort 29. maj 2009, tilgået 2. januar 2010.
- ↑ John Resig, JavaScript Getters and Setters , 18. juli 2007, tilgået 2. januar 2010
- ↑ http://www.ecma-international.org/publications/standards/Ecma-262.htm
- ^ "var - JavaScript - MDN" . Mozilla - udviklernetværket . Hentet 22. december 2012 .
- ^ "ECMAScript-sprogspecifikation - ECMA-262 Edition 5.1" . Ecma International . Hentet 22. december 2012 .
- ^ "konsol" . Mozilla Developer Network . Mozilla . Hentet 6. april 2013 .
- ↑ "JavaScript-sporing - Piwik" . Piwik . Arkiveret fra originalen den 31. oktober 2013 . Hentet 31. marts 2012 .
- ↑ Hamilton, Naomi (31. juni 2008). "Programmeringssprogenes A-Z: JavaScript" . computerworld.com.au.
- ↑ Peter-Paul Koch, Objektdetektion
- ↑ Peter-Paul Koch, Mission Impossible - museposition
- ↑ Peter-Paul Koch, Browser detect
- ↑ abc Flanagan , 2006 , s. 262-263.
- ↑ "Oprettelse af tilgængeligt JavaScript" . WebAIM . Hentet 8. juni 2010 .
- ↑ ADsafe - Gør JavaScript sikkert til annoncering
- ↑ Secure ECMA Script (SES)
- ↑ MozillaZine, Mozilla Cross-Site Scripting sårbarhed rapporteret og rettet
- ↑ "Avanceret fejlfinding med JavaScript" . alistapart.com. 3. februar 2009 . Hentet 28. maj 2010 .
- ↑ "JavaScript Debugging Console" . javascript.about.com. 28. maj 2010 . Hentet 28. maj 2010 .
- ↑ JScript-udvikling i Microsoft Office 11 (MS InfoPath 2003)
- ↑ "DragonFly Opera" . Opera software. Arkiveret fra originalen den 22. august 2011 . Hentet 19. maj 2013 .
- ^ "Introduktion af Drosera - Surfin' Safari" . Webkit.org. 28. juni 2006 . Hentet 19. maj 2009 .
Eksterne links
- Mozilla Developer Center .
- (på engelsk) Javascript tutorial .
- JavaScript - Se bag kulisserne .