**JavaScript** er et høynivå-programmeringsspråk. Sammen med HTML og CSS er det en av grunnsteinene i moderne web-utvikling, og alle moderne nettlesere kan kjøre JavaScript-programmer uten utvidelser. Språket kan brukes både til komplekse webapplikasjoner og som et enklere skriptspråk. JavaScript er standardisert igjennom spesifikasjonen kjent som ECMAScript.

JavaScript er et tolket språk, med støtte for både prototypebasert objektorientering og funksjonell programmering. Språket er kjent for å ha førsteklasses funksjoner, samt dynamiske datatyper som implisitt konverteres under kjøring.

Språket var opprinnelig designet for bruk på web, men siden slutten av 2000-tallet har JavaScript også i stadig større grad blitt brukt som serverside-språk, blant annet igjennom Node.js-plattformen.

Historie
--------

### Begynnelsen

Den første utgaven av JavaScript ble utviklet i 1995 av programmereren Brendan Eich, som da jobbet hos Netscape. Det første kodenavnet på det nye språket var *Mocha*, etter det var språket en liten periode kjent som *LiveScript*, før det kjapt fikk navnet *JavaScript*. Dette navnet spiller på programmeringsspråket Java, men er på mange måter forvirrende, siden Java og JavaScript har lite annet enn en overfladisk likhet i syntaks til felles. JavaScript har derimot mer til felles med de eldre programmeringsspråkene Self og Scheme, og Eich brukte programmeringsparadigmer fra disse da han designet JavaScript. Det var imidlertid et krav fra ledelsen i selskapet at det nye språket skulle «se ut som Java», og Eich fulgte opp dette på tross av at «hovedingrediensene» i det nye språket var hentet fra Self og Scheme.

Netscape sendte språket til Ecma International for standardisering i november 1996, og den første offisielle spesifikasjonen var kjent som *ECMA-26*. Denne var for alle praktiske formål det samme som datidens JavaScript. Senere har det blitt slik at den offisielle standarden – kjent som ECMAScript – definerer selve språket, mens JavaScript er en *implementasjon* av ECMAScript. Forskjellen er likevel mest akademisk, og i dagligtalen brukes de to begrepene om hverandre.

### Interaktive nettsider igjennom Ajax

Microsoft kom i 2000 med Ajax-teknologi i sin Internet Explorer, og i tiden som fulgte fikk alle andre nettlesere støtte for dette. I løpet av få år ble JavaScript modent nok til å lage dynamiske og fullstendige webapplikasjoner, der Gmail i 2004 ble det store gjennombruddet. Tidligere var det nødvendig å sende hele nettsiden frem og tilbake mellom nettleseren og serveren slik at alle data måtte lastes på nytt for hver endring, men den type nettsteder som ble popularisert igjennom Gmail og basert på Ajax-arkitekturen kunne klare seg med å bare sende deler av nettsiden mellom klienten og serveren når noe endret seg. Slike nettsteder ble kjent som «enkeltside-applikasjoner» (engelsk *single-page applications*), og kom for alltid til å forandre hvordan dynamiske nettapplikasjoner ble utviklet.

### Popularisering av rammeverk til server- og klientbruk

«JavaScript-revolusjonen» som var blitt satt i gang med Ajax hadde ført til at de ulike nettleserne stadig fikk bedre JavaScript-motorer. Spesielt var V8-motoren til Google Chrome rask, og i 2009 tilpasset programmereren Ryan Dahl denne slik at den også kunne brukes på servere. Dette ble startskuddet til Node.js, som populariserte serverbruk av JavaScript til I/O-intensive applikasjoner.

Den stadig økende kompleksiteten rundt det å bygge større webapplikasjoner gjorde at altomfattende JavaScript-rammeverk også på klientsiden økte i popularitet disse årene. jQuery var et tidlig bibliotek for å forenkle endringer i den såkalte DOMen, men denne hjalp ikke programmereren med å strukturere en større kodebase. I 2009 kom Miško Hevery og Adam Abrons med den første utgaven av rammeverket som senere ble kjent som AngularJS, og dette rammeverket har fått stor utbredelse etter at det ble backet av Google fra 2010. React – først lansert av Facebook i 2011 – har også vokst veldig de senere årene, og har sørget for å popularisere en arkitektur der hele brukergrensesnittet defineres i gjenbrukbare JavaScript-komponenter.

### Moderne ECMAScript-utgaver

Pr. mars 2017 finnes det sju utgaver av ECMAScript, med ECMAScript 2016 som den nyeste. De siste gjennomgripende JavaScript-endringene kom i juni 2015, med ECMAScript-standarden kjent som ES6. Det tar imidlertid tid for nettleser-leverandører å implementere støtte for de seneste versjonene, og ES6 og ECMAScript 2016 er dermed i liten grad tatt i bruk for web-formål. Det er femteutgaven ES5 (publisert i juni 2011) som fortsatt fungerer som et slags *lingua franca* på webben.

Variabler
---------

JavaScript er dynamisk typet, som vil si at datatypen ikke oppgis under deklarering av en variabel (slik som C eller Java).
Datatypen ligger implisitt i verdien som variabelen får. 

```
let x = 23; // tilordner heltallet 23 til x.
console.log(x); // skriver ut 23 

x = "Hei verden!"; // tilordner ny verdi : Hei verden! med datatypen tekststreng.
console.log(x) // skriver ut: Hei verden!

```

Referanser
----------

1. ↑   speakingjs.com[Hentet fra Wikidata]
2. 1 2 3  Brown (2016), kapittelet «A Brief History of JavaScript».
3. ↑  Eich, Brendan (3. april 2008). «Popularity». mozillazine.org. Arkivert fra originalen 24. mars 2009. Besøkt 20. mars 2017.
4. ↑  Elliott (2014), kapittelet «The JavaScript Revolution».
5. ↑  Wandschneider (2016), kapittelet «Introduction».
6. ↑  Grant (2014), kapittelet «The Basics of AngularJS».
7. ↑  Haviv et al. (2016), kapittelet «Getting Started with AngularJS».
8. ↑  Chinnathambi (2016), kapittelet «Introducing React».
9. ↑  Brown (2016), kapittelet «ES6».

Litteratur
----------

* Brown, Ethan (2016). *Learning JavaScript* (3 utg.). O'Reilly Media. ISBN 9781491914915.
* Chinnathambi, Kirupa (2016). *Learning React*. Addison-Wesley. ISBN 9780134546513.
* Elliott, Eric (2014). *Programming JavaScript Applications*. O'Reilly Media. ISBN 9781491950296.
* Grant, Andrew (2014). *Beginning AngularJS*. Apress. ISBN 9781484201602.
* Haviv, Amos Q.; Frisbie, Matt; Chandermani og Branas, Rodrigo (2014). *AngularJS: Maintaining Web Applications*. Packt. ISBN 9781786465788. CS1-vedlikehold: Flere navn: forfatterliste (link)
* Wandschneider, Marc (2016). *Learning Node.js* (2 utg.). Addison-Wesley Professional. ISBN 9780134663715.

Eksterne lenker
---------------

* ECMA-262 (ECMAScript Language Specification)
* W3 Schools' JavaScript tutorial

| * v
* d
* r
Programmeringsspråk |
| --- |
| Tidslinje |
| A# **·** ActionScript **·** Ada **·** Alef **·** ALGOL **·** ALGOL 58 **·** ALGOL 60 **·** ALGOL 68 **·** ALTRAN **·** APL **·** AppleScript **·** Argus **·** Assembler **·** Autokode **·** awk **·** B **·** BASIC **·** BCPL **·** BETA **·** BitC **·** BLISS **·** Bourne Shell **·** C **·** C++ **·** C-- **·** CHILL **·** C# **·** C shell **·** Caml **·** Ch **·** Cilk **·** Cilk++ **·** Cilk Plus **·** Clarion **·** Clipper **·** CLISP **·** Clojure **·** CLU **·** COBOL **·** COMAL **·** Common Lisp **·** Concurrent C **·** Concurrent Euclid **·** Concurrent Pascal **·** C shell **·** D **·** Delphi **·** Dylan **·** ECMAScript **·** Eiffel **·** Emacs Lisp **·** Erlang **·** Euclid **·** F\* **·** F# **·** Forth **·** Fortran **·** GNU Common Lisp **·** GNU Pascal **·** Go **·** Haskell **·** HyperTalk **·** Incr Tcl **·** INTERCAL **·** Interlisp **·** Java **·** JavaScript **·** JRuby **·** LaTeX **·** Legoscript **·** LilyPond **·** Limbo **·** Lisp **·** LPC **·** Lua **·** Lynx **·** Mary **·** MATLAB **·** Mesa **·** ML **·** MML **·** Modula **·** Modula-2 **·** Modula-2+ **·** MUMPS **·** Objective-C **·** Objective-C++ **·** OCaml **·** OpenVera **·** O'Haskell **·** Pascal **·** Perl **·** PHP **·** Pike **·** PL/I **·** Plankalkül **·** PLEX **·** Prolog **·** Protel **·** Pure Data **·** Python **·** R **·** Ratfor **·** REXX **·** RTL/2 **·** Ruby **·** Rust **·** SAS **·** Scala **·** Scheme **·** Scratch **·** Simula **·** SML **·** Smalltalk **·** SNOBOL **·** Tcsh **·** Tcl **·** TECO **·** TOM **·** Turbo Basic **·** Turbo Pascal **·** Verilog **·** Visual Prolog **·** Turing **·** TypeScript **·** Vala **·** VHDL **·** Visual Basic |
| 
* Liste over programmeringsspråk
* Kategori **Kategori**

 |

|  |  |
| --- | --- |
| Oppslagsverk/autoritetsdata | Store Danske Encyklopædi **·** Encyclopædia Britannica **·** Brockhaus Enzyklopädie **·** Nationalencyklopedin **·** GND **·** LCCN **·** BNF **·** BNF (data) **·** SUDOC **·** NKC **·** BNE
 |