Javascript

javascript
?
Generell informasjon
Vanlige utvidelser .js
Paradigme Multiparadigme , funksjonell programmering , [ 1 ] prototypebasert programmering , imperativ , tolket ( skripting )
Dukket opp i 4. desember 1995
Designet av Netscape Communications , Mozilla Foundation
Siste stabile versjon ECMAScript 2021 (01. juni 2021 (1 år, 4 måneder og 15 dager))
type system svak, dynamisk, and
implementeringer SpiderMonkey , Rhino , KJS , JavaScriptCore , V8 , Chakra .
dialekter ECMAScript
påvirket av Java , Perl , Self , Python , C , Scheme
har påvirket ObjectiveJ, JScript .NET, TIScript

JavaScript (ofte forkortet JS ) er et tolket programmeringsspråk , dialekt av ECMAScript -standarden . Det er definert som objektorientert , [ 2 ] prototypebasert , imperativ, svakt skrevet og dynamisk .

Den brukes først og fremst på klientsiden , implementert som en del av en nettleser som tillater brukergrensesnittforbedringer og dynamiske nettsider [ 3 ] og JavaScript på serversiden ( Server-side JavaScript eller SSJS ). Bruken i applikasjoner utenfor nettet , for eksempel i PDF -dokumenter , skrivebordsapplikasjoner (for det meste widgets ) er også betydelig.

Siden 2012 har alle moderne nettlesere fullt ut støtter ECMAScript 5.1, en versjon av JavaScript. Eldre nettlesere støtter minst ECMAScript 3. Den sjette utgaven ble utgitt i juli 2015. [ 4 ]

JavaScript ble utformet med syntaks som ligner på C++ og Java , [ 5 ] ​[ 6 ]​ selv om det tar i bruk navn og konvensjoner fra programmeringsspråket Java. Java og JavaScript har imidlertid forskjellig semantikk og formål. Forholdet deres er rent kommersielt, etter kjøpet av skaperen av Java (Sun Microsystems) fra Nestcape Navigator (skaperen av LiveScript) og endringen av navn på programmeringsspråket.

Alle moderne nettlesere tolker JavaScript-kode som er innebygd i nettsider. For å samhandle med en nettside leveres JavaScript-språket med en implementering av Document Object Model (DOM). Javascript er det eneste programmeringsspråket som nettlesere forstår.

Tradisjonelt har det blitt brukt i HTML -websider for å utføre operasjoner og kun innenfor rammen av klientapplikasjonen , uten tilgang til serverfunksjoner . Det er for tiden mye brukt til å sende og motta informasjon fra serveren sammen med hjelp av andre teknologier som AJAX . JavaScript tolkes av brukeragenten ettersom setningene lastes ned sammen med HTML -koden .

Siden utgivelsen av ECMAScript 1-standarden i juni 1997 har det vært versjon 2, 3 og 5, som er den mest brukte i dag (versjon 4 ble droppet [ 7 ] ). I juni 2015 ble ECMAScript 6-versjonen stengt og publisert. [ 8 ]

Historikk

JavaScripts fødsel

JavaScript ble opprinnelig utviklet av Brendan Eich fra Netscape under navnet Mocha , som senere ble omdøpt til LiveScript , og til slutt ble JavaScript. Navneendringen falt omtrent sammen med tiden da Netscape la Java-teknologistøtte til Netscape Navigator-nettleseren sin i versjon 2002 i desember 1995. Navngivningen forårsaket forvirring, og ga inntrykk av at språket er en utvidelse av Java. , og ble vurdert av mange som en markedsføringsstrategi for Netscape for å oppnå prestisje og innovere innen nye webprogrammeringsspråk. [ 9 ]​ [ 10 ]

"JAVASCRIPT" er et registrert varemerke for Oracle Corporation . [ 11 ] Den brukes under lisens av produkter laget av Netscape Communications og nåværende enheter som Mozilla Foundation . [ 12 ] ​[ 13 ]

Microsoft kalte JavaScript-dialekten " JScript ", for å unngå merkevareproblemer. JScript ble tatt i bruk i versjon 3.0 av Internet Explorer, utgitt i august 1996, og inkluderte Effect 2000- støtte for datofunksjoner, en avvik fra de som var basert på den tiden. Dialektene kan virke så like at begrepene "JavaScript" og "JScript" ofte brukes om hverandre, men JScript-spesifikasjonen er på mange måter uforenlig med ECMA-spesifikasjonen.

For å unngå disse inkompatibilitetene utviklet World Wide Web Consortium standarden Document Object Model (DOM, eller Document Object Model på spansk), som inkluderer Konqueror , versjon 6 av Internet Explorer og Netscape Navigator , Opera versjon 7, Mozilla Application Suite og Mozilla Firefox fra den første versjonen. [ referanse nødvendig ]

I 1997 foreslo forfatterne [ 14 ] JavaScript å bli adoptert som en standard av European Computer Manufacturers' Association ECMA , som til tross for navnet ikke er europeisk, men internasjonal, basert i Genève. I juni 1997 ble den tatt i bruk som en ECMA-standard, under navnet ECMAScript . Like etter også som ISO- standard .

JavaScript på serversiden

Netscape introduserte en skriptimplementering på serversiden med Netscape Enterprise Server , utgitt i desember 1994 (kort tid etter utgivelsen av JavaScript for nettlesere). [ 15 ] [ 16 ]​ Fra midten av 2000-tallet har det vært en spredning av JavaScript-implementeringer på serversiden. Node.js er et av de bemerkelsesverdige eksemplene på JavaScript på serversiden, som brukes i store prosjekter. [ 17 ]​ [ 18 ]

Senere utviklinger

JavaScript har blitt et av de mest populære og mest brukte programmeringsspråkene på internett. Til å begynne med avviste imidlertid mange utviklere språket fordi det tiltenkte publikummet blant annet besto av artikkelutgivere og andre hobbyfolk. [ 19 ] Ankomsten av Ajax brakte JavaScript tilbake til fremtreden og tiltrakk seg oppmerksomheten til mange andre programmerere. Som et resultat av dette var det en spredning av et sett med rammeverk og biblioteker av generelt omfang, forbedret JavaScript-programmeringspraksis og økt bruk av JavaScript utenfor nettlesere , som sett med spredningen av JavaScript-miljøer på nettsiden. server . I januar 2009 ble CommonJS- prosjektet lansert med mål om å spesifisere et bibliotek for bruk av vanlige oppgaver primært for utvikling utenfor nettleseren. [ 20 ]

I juni 2015 ble ECMAScript 6 -standarden stengt og publisert [ 21 ]​ [ 22 ]​ med uregelmessig støtte mellom nettlesere [ 23 ]​ og som gir JavaScript med avanserte funksjoner som ble savnet og som ofte brukes i JavaScript. andre språk, som f.eks. som moduler for kodeorganisering, sanne klasser for objektorientert programmering , piluttrykk, iteratorer, generatorer eller løfter for asynkron programmering.

Versjon 7 av ECMAScript er kjent som ECMAScript 2016, [ 24 ] og er den nyeste versjonen tilgjengelig, utgitt i juni 2016. Det er den første versjonen som bruker en ny årlig utgivelsesprosedyre og utviklingsprosess. [ 25 ]

Funksjoner

Følgende funksjoner er felles for alle implementeringer som samsvarer med ECMAScript-standarden, med mindre du eksplisitt spesifiserer noe annet.

Imperativ og strukturert

JavaScript støtter mye av programmeringsstrukturen til C (for eksempel setninger if, looper for, setninger switchosv.). Med ett forbehold, delvis: i C er variabler scoped til blokken der de ble definert; JavaScript støtter imidlertid ikke dette, siden omfanget av variabler er det for funksjonen de ble deklarert i. Dette endres med ECMAScript 2015-utgivelsen, ettersom den legger til støtte for blokkomfang via nøkkelordet . Som i C, skiller JavaScript mellom uttrykk og utsagn. En syntaktisk forskjell med hensyn til C er automatisk innsetting av semikolon, det vil si at i JavaScript kan semikolonene som avslutter en setning utelates. [ 26 ] let

Dynamisk

dynamisk skriving Som i de fleste skriptspråk er typen knyttet til verdien, ikke variabelen. For eksempel kan en variabel xpå en gang være bundet til et tall og senere rebound til en streng . JavaScript støtter flere måter å sjekke typen til et objekt, inkludert duck typing . [ 27 ] En måte å finne ut av det på er gjennom nøkkelordet typeof. objektivt JavaScript består nesten utelukkende av objekter . Objekter i JavaScript er assosiative arrays , forbedret ved inkludering av prototyper (se nedenfor). Objektegenskapsnavn er nøkler av typen string: obj.x = 10og obj['x'] = 10er ekvivalente, punktnotasjonen er syntaktisk sukker . Egenskaper og deres verdier kan opprettes, endres eller slettes under kjøring. De fleste egenskapene til et objekt (og de som er inkludert i den prototypiske arvekjeden) kan telles opp via loop-setningen for... in. JavaScript har et lite antall forhåndsdefinerte objekter som Functionog Date. Kjøretidsevaluering JavaScript inkluderer muligheten evaltil å evaluere uttrykk uttrykt som strenger under kjøring. Av denne grunn anbefales det at evalden brukes med forsiktighet og at du velger å bruke funksjonen JSON.parse()så mye som mulig, da den kan være mye sikrere.

Funksjonell

Førsteklasses funksjoner Funksjoner kalles ofte førsteklasses borgere; de er objekter i seg selv. Som sådan har de egenskaper og metoder, som .call()og .bind(). [ 28 ]​ En nestet funksjon er en funksjon definert inne i en annen. Dette opprettes hver gang den ytre funksjonen kalles. Hver funksjon som opprettes danner også en lukking ; er resultatet av å evaluere et omfang som inneholder én eller flere variabler avhengig av et annet ytre omfang, inkludert konstanter, lokale variabler og argumenter for den kallende ytre funksjonen. Resultatet av å evaluere denne lukkingen er en del av den interne tilstanden til hvert funksjonsobjekt, selv etter at den ytre funksjonen har fullført evalueringen. [ 29 ]

Prototypisk

prototyper JavaScript bruker prototyper i stedet for klasser for bruk av arv . [ 30 ] Det er mulig å emulere mange av funksjonene som tilbys av klasser i tradisjonelle objektorienterte språk ved å lage prototyper i JavaScript. [ 31 ] Fungerer som objektkonstruktører Funksjoner oppfører seg også som konstruktører. Prefiks et funksjonskall med nøkkelordet newopprette en ny forekomst av en prototype, som arver konstruktørens egenskaper og metoder (inkludert prototypens egenskaper Object). [ 32 ] ECMAScript 5 gir metoden Object.create, som tillater eksplisitt opprettelse av en instans uten å automatisk arve fra objektprototypen (i eldre miljøer kan det opprettede objektets prototype vises som null). [ 33 ] Konstruktøregenskapen prototypebestemmer objektet som brukes for den interne prototypen til nyopprettede objekter. Nye metoder kan legges til ved å modifisere prototypen til objektet som brukes som konstruktør. Forhåndsdefinerte konstruktører i JavaScript, som Arrayu Object, har også prototyper som kan endres. Selv om dette er mulig, anses det som dårlig praksis å modifisere prototypen til Objectsiden de fleste objekter i Javascript arver metodene og egenskapene til objektet prototype, objekter som kan forvente at de ikke har blitt endret. [ 34 ]

Andre funksjoner

Runtime miljø JavaScript avhenger vanligvis av miljøet det kjøres i (for eksempel i en nettleser ) for å gi objekter og metoder som skript kan samhandle med "verden utenfor". Faktisk avhenger det av miljøet for å kunne gi muligheten til å inkludere eller importere skript (for eksempel i HTML via taggen <script>). (Dette er ikke en språkfunksjon, men er vanlig for de fleste JavaScript-implementeringer.) variadiske funksjoner Et ubestemt antall parametere kan overføres til funksjonen. Funksjonen kan få tilgang til dem gjennom parametrene eller også gjennom det lokale objektet arguments. Variadiske funksjoner kan også opprettes ved å bruke .apply(). Fungerer som metoder I motsetning til mange objektorienterte språk, er det ingen forskjell mellom funksjonsdefinisjon og metodedefinisjon . Snarere oppstår distinksjonen under funksjonsanropet; en funksjon kan kalles som en metode. Når en funksjon kalles som en metode for et objekt, representerer nøkkelordet this, som er en variabel lokal for funksjonen, objektet som kalte funksjonen. Arrays og den bokstavelige definisjonen av objekter Som mange skriptspråk kan arrays og objekter ( assosiative arrays på andre språk) opprettes med en stenografisyntaks. Faktisk danner disse bokstavene grunnlaget for JSON -dataformatet . Vanlig uttrykk JavaScript støtter også regulære uttrykk på en lignende måte som Perl , som gir en kortfattet og kraftig syntaks for tekstmanipulering som er mer sofistikert enn funksjoner innebygd i strengobjekter. [ 35 ]

Produsentspesifikke utvidelser

JavaScript er offisielt under Mozilla Foundation -organisasjonen , og nye språkfunksjoner legges til med jevne mellomrom. Imidlertid støtter bare noen JavaScript-motorer disse funksjonene:

Syntaks og semantikk

den siste versjonen av språket er ECMAScript 2016 publisert 17. juni 2016. [ 38 ]

Enkle eksempler

Variabler i JavaScript er definert ved å bruke var nøkkelordet : [ 39 ]

var x ; // definerer variabelen x, selv om den ikke har noen verdi tildelt som standard var y = 2 ; // definer variabelen y og tilordne verdien 2 til den

Tenk på kommentarene i eksemplet ovenfor, som innledes med 2 skråstreker.

Det er ingen I/O- funksjoner inkludert i språket; kjøretidsmiljøet gir det allerede. ECMAScript-spesifikasjonen i sin 5.1-utgave nevner: [ 40 ]

...det er faktisk ingen bestemmelser i denne spesifikasjonen for ekstern datainngang eller utdata for beregnede resultater.

Imidlertid har de fleste kjøretidsmiljøer et objekt kalt [ 41 ]console​ som kan brukes til å skrive ut av feilsøkingskonsollens utdatastrøm. Her er et enkelt program som skriver ut "Hello world!":

konsoll . log ( "Hei verden!" );

En rekursiv funksjon :

funksjon faktoriell ( n ) { if ( n === 0 ) { return 1 ; } returner n * faktoriell ( n - 1 ); }

Eksempler på anonym funksjon (eller lambda- funksjon ) og en stenging:

var displayClosure = function () { var count = 0 ; return funksjon () { return ++ count ; }; } var inc = displayClosure (); inc (); // returnerer 1 inc (); // returnerer 2 inc (); // retur 3

Selvpåkallende uttrykk lar funksjoner overføre variabler til den etter parameter innenfor sine egne lukkinger.

var v ; v = 1 ; var getValue = ( function ( v ) { return function () { return v ;}; }( v )); v = 2 ; getValue (); // 1

Mer avanserte eksempler

Følgende kode viser ulike funksjoner i JavaScript.

/* Finn det minste felles multiplumet (LCM) av to tall */ function LCMCalculator ( x , y ) { // constructor function var checkInt = function ( x ) { // indre funksjon if ( x % 1 !== 0 ) { kaste ny TypeError ( x + " er ikke et heltall" ); // kast et unntak } returner x ; }; dette . a = checkInt ( x ) // semikolon er valgfritt dette . b = checkInt ( og ); } // Prototypen til objektforekomstene opprettet av konstruktøren er den for "prototype"-egenskapen til konstruktøren. LCMC-kalkulator . prototype = { // objekt definert som bokstavelig konstruktør : LCMCalculator , // når vi tilordner en prototype på nytt, setter vi korrekt konstruktøregenskapen gcd : function () { // metode som beregner den største felles faktoren // Euklids algoritme: var a = Matematikk . abs ( dette . a ), b = matematikk . abs ( dette . b ), t ; if ( a < b ) { // swap variabler t = b ; b = a ; a = t ; } while ( b !== 0 ) { t = b ; b = a % b ; a = t ; } // Vi trenger bare å beregne GCF én gang, så vi 'redefinerer' denne metoden. // (Ikke egentlig en overstyring – den er definert på selve forekomsten, så // this.gcd refererer til denne 'overstyringen' i stedet for LCMCalculator.prototype.gcd). // Dessuten, 'gcd' === "gcd", this['gcd'] === this.gcd this [ 'gcd' ] = function () { return a ; }; gå tilbake til ; }, // Objektegenskapsnavn kan spesifiseres med strenger avgrenset med enkle anførselstegn (') eller doble anførselstegn (“). "lcm" : function () { // Variablenavn kolliderer ikke med objektegenskaper. For eksempel: |lcm| er ikke |this.lcm|. // Ikke bruk |this.a * this.b| for å unngå problemer med flyttallsberegninger. var lcm = dette . til / dette . gcd () * denne . b ; // Vi trenger bare å beregne LCM én gang, så vi "redefinerer" denne metoden. dette . lcm = funksjon () { return lcm ; }; retur lcm ; }, toString : function () { return "LCMCalculator: a = " + dette . a + ", b = " + dette . b ; } }; // Vi definerer en generisk funksjon for å skrive ut et resultat; denne implementeringen fungerer bare i nettlesere funksjonsutgang ( x ) { document . kropp . appendChild ( dokument . createTextNode ( x )); dokument . kropp . appendChild ( dokument . createElement ( 'br' )); } // Merk: .map()- og .forEach()-metodene til Array-prototypen er definert i JavaScript 1.6. // Disse metodene brukes her for å demonstrere språkets iboende funksjonelle natur. [[ 25 , 55 ], [ 21 , 56 ], [ 22 , 58 ], [ 28 , 56 ]]. map ( function ( par ) { // bokstavelig konstruksjon av en Array + mapping funksjon. returner ny LCMCalculator ( par [ 0 ], par [ 1 ]); }). sort ( function ( a , b ) { // sorter samlingen med denne funksjonen returner a . lcm () - b . lcm (); }). forEach ( function ( obj ) { output ( obj + ", gcd = " + obj . gcd () + ", lcm = " + obj . lcm ()); });

Følgende eksempel viser utdataene som skal vises i et nettleservindu.

LCMCalkulator: a = 28, b = 56, gcd = 28, lcm = 56 LCMC-kalkulator: a = 21, b = 56, gcd = 7, lcm = 168 LCMC-kalkulator: a = 25, b = 55, gcd = 5, lcm = 275 LCMCalkulator: a = 22, b = 58, gcd = 2, lcm = 638

Bruk på nettsider

Se også: JavaScript og AJAX- tolk .

Den vanligste bruken av JavaScript er å skrive funksjoner som er innebygd i HTML-sider og som samhandler med Document Object Model (DOM) på siden. Noen enkle eksempler på denne bruken er:

  • Last opp nytt innhold for siden eller send data til serveren via AJAX uten å laste siden på nytt (for eksempel kan et sosialt nettverk tillate brukeren å sende statusoppdateringer uten å forlate siden).
  • Animer sideelementer, få dem til å forsvinne, endre størrelse, flytt osv.
  • Interaktivt innhold, for eksempel spill og lyd- og videoavspilling.
  • Validering av inngangsverdiene til et nettskjema for å sikre at de er akseptable før de sendes til serveren.
  • Overføring av informasjon om brukernes lesevaner og surfeaktiviteter til ulike nettsider. Nettsider gjør dette ofte for nettanalyse, annonsesporing, personalisering eller andre formål. [ 42 ]

Fordi JavaScript-kode kan kjøres lokalt i brukerens nettleser (i stedet for på en ekstern server), kan nettleseren reagere raskt på brukerhandlinger, noe som gjør en applikasjon mer responsiv. På den annen side kan JavaScript-kode oppdage brukerhandlinger som HTML alene ikke kan, for eksempel tastetrykk. Applikasjoner som Gmail drar nytte av dette: det meste av brukergrensesnittlogikken er skrevet i JavaScript, og sender forespørsler til serveren (for eksempel innholdet i en e-postmelding). Den økende trenden for bruk av Ajax-programmering utnytter på samme måte denne teknikken.

En JavaScript-motor (også kjent som en JavaScript-tolk eller JavaScript-implementering) er en tolk som tolker JavaScript-kildekode og kjører skript deretter. Den første JavaScript-motoren ble laget av Brendan Eich hos Netscape Communications Corporation, for Netscape Navigator-nettleseren. Motoren, kalt SpiderMonkey, er implementert i C. Den har siden blitt oppdatert (i JavaScript 1.5) for å samsvare med ECMA-262 utgave 3. Rhino-motoren, skapt primært av Norris Boyd (tidligere fra Netscape, nå hos Google) er en implementering av JavaScript i Java . Rhino, som SpiderMonkey, er ECMA-262 edition 3-kompatibel.

En nettleser er det desidert vanligste vertsmiljøet for JavaScript. Nettlesere lager ofte ikke-native, kjøretidsavhengige objekter for å representere Document Object Model (DOM) i JavaScript. Nettserveren er et annet vanlig tjenestemiljø. En JavaScript-nettserver eksponerer vanligvis sine egne objekter for å representere HTTP-forespørsels- og svarobjekter, som et JavaScript-program deretter kan avhøre og manipulere for å generere nettsider dynamisk.

Fordi JavaScript er det eneste språket som de fleste populære nettlesere deler støtte for, har det blitt et språk som mange rammeverk på andre språk kompilerer til, selv om JavaScript ikke er laget for slike formål. [ 43 ] Til tross for ytelsesbegrensningene som ligger i dens dynamiske natur, har den økte hastigheten til JavaScript-motorer gjort dette språket til et overraskende gjennomførbart kompileringsmiljø.

Skripteksempel

Her er et kort eksempel på en nettside (som samsvarer med standardene til HTML5 -standarden ) som bruker JavaScript for DOM -håndtering :

<!DOCTYPE html> < html > < head > < meta charset = "utf-8" > < title > Enkelt eksempel </ title > </ head > < body > < h1 id = "header" > Dette er JavaScript </ h1 > < script > dokument . kropp . appendChild ( document . createTextNode ( 'Hei verden!' )); var h1 = dokument . getElementById ( 'header' ); // inneholder referansen til <h1>-taggen h1 = document . getElementsByTagName ( 'h1' )[ 0 ]; // tilgang til det samme <h1>-elementet </ script > < noscript > Nettleseren din støtter ikke JavaScript, eller JavaScript er deaktivert. </ noscript > </ body > </ html >

Kompatibilitetshensyn

Fordi JavaScript kjører i så mange forskjellige miljøer, er en viktig del av testing og feilsøking å teste og verifisere at JavaScript-koden din fungerer riktig i flere nettlesere. DOM-grensesnittet for tilgang til og manipulering av nettsider er ikke en del av ECMAScript-standarden, eller JavaScript i seg selv. DOM er definert av standardiseringsinnsatsen til W3C , en uavhengig organisasjon. I praksis skiller ulike nettleseres implementeringer av JavaScript seg både fra hverandre og fra standardene til standarden.

For å løse disse forskjellene, kan JavaScript-forfattere ha vært i stand til å skrive standardkompatibel kode som også vil kjøre riktig i de fleste nettlesere, eller hvis det ikke er mulig, i det minste skrive kode som er i stand til å kontrollere tilstedeværelsen av visse nettleserfunksjoner og at den oppfører seg annerledes hvis den blir sagt. funksjonalitet er ikke tilgjengelig. [ 44 ] Det er tilfeller der to nettlesere kan implementere den samme funksjonen, men med forskjellig oppførsel, et faktum som kan hjelpe programmerere til å oppdage hvilken nettleser som kjører i det øyeblikket og dermed endre oppførselen til skrivingen din for å matche. [ 45 ]​ [ 46 ]​ Programmerere bruker også ofte biblioteker eller verktøy som tar hensyn til forskjellene mellom nettlesere.

Dessuten kan det hende at skriptene ikke fungerer for enkelte brukere. For eksempel kan en bruker:

  • Ved å bruke en eldre nettleser uten full støtte for DOM API,
  • Bruk en PDA eller mobiltelefon som ikke kan kjøre JavaScript
  • Har JavaScript-kjøring deaktivert, som en sikkerhetsforanstaltning,
  • Bruk av stemmeleser på grunn av for eksempel synshemming.

For å støtte disse brukerne lager webutviklere ofte sider som er feiltolerante basert på brukeragent (nettlesertype) som ikke støtter JavaScript. Spesielt bør siden fortsatt være nyttig uten tilleggsfunksjonene som JavaScript ville ha lagt til. En alternativ tilnærming som mange finner å foretrekke er å først lage innhold ved hjelp av teknologier som fungerer i alle nettlesere, og forbedre innholdet for brukere som har aktivert JavaScript.

Tilgjengelighet

Forutsatt at brukeren ikke har deaktivert kjøring av JavaScript-kode, bør JavaScript på klientsiden skrives både med det formål å forbedre opplevelsene til besøkende med visuelle eller fysiske funksjonshemninger, og for å unngå å skjule informasjon fra disse besøkende. [ 47 ]

Skjermlesere , brukt av blinde og svaksynte, kan tas i betraktning av JavaScript og dermed kunne få tilgang til og lese DOM-elementene på siden. Skrevet HTML-kode bør være så kortfattet, navigerbar og semantisk rik som mulig, enten JavaScript kjøres eller ikke.

JavaScript skal ikke være helt avhengig av musehendelser i nettleseren og bør være tilgjengelig for brukere som ikke ønsker å bruke musen (datamaskinen) til å navigere eller som velger å kun bruke tastaturet. Det er enhetsuavhengige hendelser som onfocusog onchangesom er å foretrekke i de fleste tilfeller. [ 47 ]

JavaScript må ikke brukes til å skape forvirring eller desorientering for nettbrukeren. For eksempel, modifisering eller deaktivering av normal nettleserfunksjonalitet, som å endre måten naviger tilbake-knappen eller oppdateringshendelsen oppfører seg på, er praksis som vanligvis best unngås. På samme måte reduserer det å utløse hendelser som brukeren kanskje ikke er klar over brukerens følelse av kontroll og forårsaker uventede endringer i sideinnholdet. [ 48 ]

Ofte blir prosessen med å tilby en kompleks nettside med høyest mulig grad av tilgjengelighet et ikke-trivielt problem der mange saker ender opp med å bli debattert og gitt mening, som krever alles forpliktelse til slutten. Imidlertid er brukeragenter og hjelpeteknologier for funksjonshemmede i stadig utvikling, og nye retningslinjer og informasjon blir fortsatt lagt ut på nettet. [ 47 ]

Sikkerhet

Se også: Nettlesersikkerhet

JavaScript og DOM lar programmerere misbruke det til å introdusere skript som kjører kode med skadelig innhold uten brukerens samtykke, og dermed kompromittere brukersikkerheten.

Nettleserutviklere tar hensyn til denne risikoen ved å bruke to begrensninger. For det første kjører skriptene i en sandkasse der bare nettrelaterte handlinger kan utføres, ikke generelle programmeringsoppgaver som filoppretting. For det andre er det begrenset av samme opprinnelsespolicy: skript fra ett nettsted har ikke tilgang til informasjon sendt til et annet nettsted (fra et annet domene), for eksempel brukernavn, passord eller informasjonskapsler. De fleste JavaScript-sikkerhetsfeil er relatert til brudd på en av disse to begrensningene.

Det er prosjekter som AdSafe eller Secure ECMA script (SES) som gir høyere sikkerhetsnivåer, spesielt i kode laget av tredjeparter (for eksempel annonser). [ 49 ]​ [ 50 ]

Content Secure Policy (CSP) er den primære metoden som er tenkt for å sikre at bare klarert kode kan kjøres på en nettside.

Sårbarheter på tvers av nettsteder

Et vanlig sikkerhetsproblem i JavaScript er skripting på tvers av nettsteder , eller XSS, et brudd på retningslinjene for samme opprinnelse. XSS-sårbarheter lar en angriper injisere JavaScript-kode på nettsider som brukeren besøker. Et slikt nettsted kan være en bank, der angriperen kan få tilgang til bankapplikasjonen med offerets privilegier, som kan avsløre hemmelig informasjon eller overføre penger uten offerets autorisasjon. En løsning på XSS-sårbarheter er å bruke HTML-escape når du viser informasjon fra upålitelige kilder.

Noen nettlesere inkluderer delvis beskyttelse mot reflekterte XSS-angrep (angriperen er i samme nettforespørsel). Angriperen oppgir en URL inkludert ondsinnet kode. Men selv nettleserbrukere er sårbare for andre XSS-angrep, for eksempel de der ondsinnet kode er lagret i en database. Bare riktig utforming av webapplikasjoner på serversiden kan totalt forhindre XSS. XSS-sårbarheter kan også oppstå på grunn av kjøringsfeil fra nettleserutviklere. [ 51 ]

En annen sårbarhet er forespørselsforfalskning på tvers av nettsteder eller CSRF. I CSRF lurer det angripende nettstedets kode offerets nettleser, slik at angriperen kan komme med forespørsler på vegne av offeret, noe som gjør det umulig for målapplikasjonen (for eksempel en bank som utfører en pengeoverføring) å vite om forespørselen ble gjort frivillig. av brukeren eller av et CSRF-angrep.

Angrepet fungerer fordi hvis målnettstedet bare bruker informasjonskapsler for å autentisere offerforespørsler, vil forespørsler initiert av angriperens kode ha samme legitime tilgangslegitimasjon som brukerinitierte forespørsler.

Generelt er løsningen på CSRF å introdusere et skjult skjemafelt hvis verdi brukes til å utføre autentisering, og ikke bare via informasjonskapsler, på forespørsler som kan ha varige effekter. Å sjekke HTTP-henvisningshodet kan også hjelpe.

"JavaScript-kapring" er en type CSRF-angrep der en <script>-tag på angriperens nettsted utnytter en sårbarhet på siden til offerets nettsted som får den til å returnere privat informasjon, i form av JSON- eller JavaScript-kode. Mulige løsninger er:

  • at det kreves et autentiseringstoken i parametrene til POST- og GET-forespørslene for de forespørslene som krever retur av privat brukerinformasjon.
  • bruk POST og aldri GET for forespørsler som returnerer privat informasjon

Utviklingsverktøy

I JavaScript blir det nødvendig å ha en debugger når du utvikler store, ikke-trivielle applikasjoner. Siden det kan være implementeringsforskjeller mellom ulike nettlesere (spesielt når det gjelder DOM), er det nyttig å ha tilgang til en debugger for hver av nettleserne som webapplikasjonen vår vil målrette mot. [ 52 ]

Nettfeilsøkere er tilgjengelige for Internet Explorer, Firefox, Safari, Google Chrome og Opera. [ 53 ]

Det er tre debuggere tilgjengelig for Internet Explorer : Microsoft Visual Studio er den mest avanserte av de tre, tett fulgt av Microsoft Script Editor (en komponent av Microsoft Office ) [ 54 ] og til slutt Microsoft Script Debugger, som er mye mer grunnleggende enn den andre to, selv om det er gratis. Den gratis Microsoft Visual Web Developer Express IDE tilbyr en begrenset versjon av JavaScript-feilsøkingsfunksjonaliteten i Microsoft Visual Studio. Internet Explorer har inkludert utviklerverktøy siden versjon 8 (vises ved å trykke på F12-tasten). Nettapplikasjoner i Firefox kan feilsøkes ved å bruke Firebug -tillegget eller den gamle Venkman-feilsøkeren. Firefox har også en grunnleggende feilkonsoll innebygd, som logger og evaluerer JavaScript. Den logger også CSS- feil og advarsler. Opera inkluderer et sett med verktøy kalt Dragonfly. [ 55 ] WebKits nettinspektør inkluderer en JavaScript debugger [ 56 ] brukt i Safari , sammen med en modifisert versjon av Google Chrome .

Det finnes noen hjelpeverktøy for feilsøking, også skrevet i JavaScript og bygget for å kjøre på nettet. Et eksempel er JSLint -programmet , utviklet av Douglas Crockford , som har skrevet mye om språket. JSLint analyserer JavaScript-kode slik at den samsvarer med et sett med standarder og retningslinjer for å sikre riktig funksjonalitet og vedlikehold.

Se også

Referanser

  1. Douglas Crockford om funksjonell JavaScript (2:49): "[JavaScript] er det mest populære funksjonelle språket i verden. JavaScript er og har alltid vært, i det minste siden [versjon] 1.2, et funksjonelt programmeringsspråk."
  2. ^ "Arkiveret kopi" . Arkivert fra originalen 12. april 2015 . Hentet 2010-11-23 . 
  3. M. Domínguez-Dorado,. All programmering. nr. 12. Sider. 48-51. Redaksjonell Iberprensa (Madrid). DL M-13679-2004. September 2005. Databaser på klientsiden med JavaScript DB . 
  4. ^ "JavaScript" . Mozilla utviklernettverk . Hentet 16. september 2016 . 
  5. «Om JavaScript - JavaScript | MDN» . developer.mozilla.org (på amerikansk engelsk) . Hentet 4. juli 2022 . 
  6. ^ "Introduksjon" . web.stanford.edu . Hentet 4. juli 2022 . 
  7. Eich, Brendan (13. august 2008). ECMAScript Harmony . Hentet 22. juli 2015 . 
  8. campusMVP (19. juni 2015). "ECMAScript 6 er nå en lukket standard" . Hentet 22. juli 2015 . 
  9. Programmeringsspråk brukt på Internett og World Wide Web (WWW) (spansk)
  10. JavaScript: The Definitive Guide, 6. utgave
  11. http://tsdr.uspto.gov/#caseNumber=75026640&caseType=SERIAL_NO&searchType=statusSearch
  12. Oracle-varemerker .
  13. "Om JavaScript " . Hentet 29. august 2013 . "JavaScript er et varemerke eller registrert varemerke for Oracle i USA og andre land." 
  14. Pressemelding fra Netscape (spansk)
  15. "Kapittel 2: Komme i gang" . JavaScript-veiledning på serversiden . Netscape Communications Corporation. 1998 . Hentet 2012-04-25 . 
  16. ^ Mike Morgan (1996). "Kapittel 6: Netscape Internet Application Framework" . Bruke Netscape™ LiveWire™, spesialutgave . At. Arkivert fra originalen 21. desember 2012 . Hentet 19. mai 2013 . 
  17. "Javascript på serversiden: Tilbake med en hevn" . Les Skriv Web . 17. desember 2009. Arkivert fra originalen 2. juni 2012 . Hentet 28. mai 2012 . 
  18. ^ "Nodes mål er å tilby en enkel måte å bygge skalerbare nettverksprogrammer på" . Om Node.js . Gledelig. 
  19. "JavaScript: Verdens mest misforståtte programmeringsspråk" . crockford.com . Hentet 19. mai 2009 . 
  20. Kris Kowal (1. desember 2009). "CommonJS-innsats setter JavaScript på vei for verdensherredømme" . Ars Technica . Conde Nast Publications . Hentet 18. april 2010 . 
  21. ECMA International (juni 2015). "Standard ECMA-262 6. utgave" . 
  22. campusMVP (19. juni 2015). "ECMAScript 6 er allerede en lukket standard" . Hentet 22. juli 2015 . 
  23. ^ "ECMAScript 6-nettleserkompatibilitetstabell (engelsk)" . 
  24. ECMA International (juni 2016). "Standard ECMA-262 7. utgave" . 
  25. ECMA International (juni 2016). "ECMAScript 2016 språkspesifikasjon" . 
  26. Flanagan, 2006 , s. 16.
  27. Flanagan, 2006 , s. 176–178.
  28. Egenskaper for funksjonsobjektet
  29. Flanagan, 2006 , s. 141.
  30. ^ "Arv og prototypekjeden" . Mozilla utviklernettverk . Mozilla . Hentet 6. april 2013 . 
  31. ^ Herman, David (2013). Effektivt Javascript . Addison-Wesley. s. 83. ISBN  9780321812186 . 
  32. ^ Haverbeke, Marjin (2011). Veltalende Javascript . Ikke Starch Press. s. 95-97 . ISBN  9781593272821 . 
  33. Katz, Yehuda. "Forstå "prototyper" i JavaScript" . Hentet 6. april 2013 . 
  34. ^ Herman, David (2013). Effektivt Javascript . Addison-Wesley. s. 125-127. ISBN  9780321812186 . 
  35. Haverbeke, Marijn (2011). Veltalende JavaScript . Ikke Starch Press. s. 139-149 . ISBN  978-1593272821 . 
  36. Robert Nyman, Getters And Setters With JavaScript – Code Samples And Demos , publisert 29. mai 2009, åpnet 2. januar 2010.
  37. John Resig, JavaScript Getters and Setters , 18. juli 2007, åpnet 2. januar 2010
  38. http://www.ecma-international.org/publications/standards/Ecma-262.htm
  39. ^ "var - JavaScript - MDN" . Mozilla - utviklernettverket . Hentet 22. desember 2012 . 
  40. ^ "ECMAScript-språkspesifikasjon - ECMA-262 Edition 5.1" . Ecma International . Hentet 22. desember 2012 . 
  41. ^ "konsoll" . Mozilla utviklernettverk . Mozilla . Hentet 6. april 2013 . 
  42. "JavaScript-sporing - Piwik" . Piwik . Arkivert fra originalen 31. oktober 2013 . Hentet 31. mars 2012 . 
  43. Hamilton, Naomi (31. juni 2008). "Programmeringsspråkenes A-Z: JavaScript" . computerworld.com.au. 
  44. Peter-Paul Koch, Objektdeteksjon
  45. Peter-Paul Koch, Mission Impossible - museposisjon
  46. Peter-Paul Koch, Nettleseroppdag
  47. abc Flanagan , 2006 , s. 262–263.
  48. "Opprette tilgjengelig JavaScript" . WebAIM . Hentet 8. juni 2010 . 
  49. ADsafe - Gjør JavaScript trygt for annonsering
  50. Secure ECMA Script (SES)
  51. MozillaZine, Mozilla Cross-Site Scripting sårbarhet rapportert og fikset
  52. "Avansert feilsøking med JavaScript" . alistapart.com. 3. februar 2009 . Hentet 28. mai 2010 . 
  53. "JavaScript-feilsøkingskonsollen" . javascript.about.com. 28. mai 2010 . Hentet 28. mai 2010 . 
  54. JScript-utvikling i Microsoft Office 11 (MS InfoPath 2003)
  55. "DragonFly Opera" . Opera programvare. Arkivert fra originalen 22. august 2011 . Hentet 19. mai 2013 . 
  56. ^ "Vi introduserer Drosera - Surfin' Safari" . Webkit.org. 28. juni 2006 . Hentet 19. mai 2009 . 

Eksterne lenker