JavaScript | |
---|---|
Kieliluokka |
moniparadigma : oliosuuntautunut ( prototyyppinen ), yleistetty , toiminnallinen , pakottava , aspektisuuntautunut , tapahtumalähtöinen ohjelmointi |
Toteutustyyppi | tulkinta, käännös Java-tavukoodiksi [ 1] , JIT natiivikoodiksi [2] |
Esiintyi | 1995 |
Tekijä | Brendan Eich |
Tiedostotunniste _ | .js, .cjs, .mjs[Спецификация 1] |
Vapauta | ECMAScript 2022 [3] (kesäkuu 2022 ) |
Tyyppijärjestelmä | dynaaminen , ankka |
Tärkeimmät toteutukset | SpiderMonkey , Rhino , KJS (JavaScript) , JavaScriptCore , V8 |
Vaikutettu | Lua , Self [4] , C , Scheme [4] , Perl [4] , Python , Java [4] , AWK [4] , HyperTalk [4] |
vaikutti | Objective-J , Dart , TypeScript |
Mediatiedostot Wikimedia Commonsissa |
JavaScript | |
---|---|
Laajennus | .js[7] |
MIME -tyyppinen | teksti/javascript, sovellus/javascript [5] [6] |
julkaistu | Syyskuu 1995 [8] |
Muototyyppi | tekstitiedosto lähdekoodilla _ |
Laajennettu kohteesta | ECMAScript |
Mediatiedostot Wikimedia Commonsissa |
JavaScript ( / ˈ dʒ ɑː v ɑː ˌ s k r ɪ p t / ; lyhenne JS /ˈdʒeɪ.ɛs./ ) on usean paradigman ohjelmointikieli . Tukee olio- , pakottavia ja toiminnallisia tyylejä. Se on ECMAScript - määrityksen (ECMA-262 [9] standardi ) toteutus.
JavaScriptiä käytetään yleisesti upotettavana kielenä sovellusobjektien ohjelmalliseen käyttöön . Sitä käytetään yleisimmin selaimissa komentosarjakielenä verkkosivujen tekemiseen interaktiivisiksi [10] .
Tärkeimmät arkkitehtoniset ominaisuudet: dynaaminen kirjoitus , heikko kirjoitus , automaattinen muistinhallinta , prototyyppiohjelmointi , toimii ensiluokkaisina esineinä .
JavaScriptiin on vaikuttanut monet kielet, ja tavoitteena oli tehdä kielestä samanlainen kuin Java. JavaScript ei ole minkään yrityksen tai organisaation omistuksessa, mikä erottaa sen useista verkkokehityksessä käytetyistä ohjelmointikielistä [~ 1] [11] .
Nimi "JavaScript" on Oracle Corporationin Yhdysvalloissa rekisteröity tavaramerkki [ 12 ] .
Vuonna 1992 Nombas ( myöhemmin Openwave osti ) alkoi kehittää upotettavaa komentosarjakieltä Cmm (C-miinus-miinus), jonka kehittäjien mukaan piti olla tarpeeksi tehokas korvaamaan makrot säilyttäen samalla samankaltaisuuden C:n kanssa. , jotta kehittäjät voivat helposti oppia sen [13] . Suurin ero C:stä oli muistinkäsittely. Uudella kielellä kaikki muistinhallinta tehtiin automaattisesti: puskureita ei tarvinnut luoda , muuttujia deklaroida ja tyyppimuunnoksia tehdä. Muilta osin kielet olivat hyvin samankaltaisia keskenään: erityisesti Cmm tuki vakiotoimintoja ja C-operaattoreita [14] . Cmm nimettiin uudelleen ScriptEaseksi , koska alkuperäinen nimi kuulosti liian negatiiviselta ja C:n maininta siinä "pelotti" ihmisiä [13] [15] . Tämän kielen pohjalta luotiin patentoitu tuote CEnvi . Marraskuun lopussa 1995 Nombas kehitti CEnvista version, joka on upotettu web-sivuille. Sivuja, joita voitiin muokata skriptikielellä, kutsuttiin Espresso Pages -sivuiksi , jotka esittelivät skriptikielen käyttöä pelin luomiseen, käyttäjien syötteiden vahvistamiseen lomakkeisiin ja animaatioiden luomiseen. Espresso Pages asetettiin demoksi , joka auttoi kuvittelemaan, mitä tapahtuisi, jos Cmm -kieli otettaisiin käyttöön selaimessa . Ne toimivat vain 16-bittisessä Netscape Navigatorissa Windowsissa [ 16 ] .
Ensimmäisen JavaScript - toteutuksen loi Brendan Eich Netscapessa, ja se on sittemmin päivitetty vastaamaan ECMA-262 Edition 5:tä ja uudempaa. Tätä moottoria kutsutaan nimellä SpiderMonkey ja se on toteutettu C/ C++ -kielellä . Rhino-moottorin loi Norris Boyd ja se toteutettiin Javalla. Kuten SpiderMonkey , Rhino on ECMA-262 Edition 5:n mukainen.
Netscapen 4. huhtikuuta 1995 palkkaama Brendan Eich [18] sai tehtäväkseen tuoda Scheme -ohjelmointikielen tai jotain vastaavaa Netscape-selaimeen. Vaatimusten hämärtyessä Eich siirtyi Palvelintuotteet-ryhmään, jossa hän työskenteli kuukauden ajan HTTP-protokollan parantamiseksi [18] . Toukokuussa kehittäjä siirrettiin takaisin asiakaspuolen (selain) tiimiin, jossa hän aloitti heti uuden ohjelmointikielen konseptin kehittämisen. Selaimen kehityshallinta, mukaan lukien Tom Paquin , Michael Toy , Rick Schell , olivat vakuuttuneita siitä, että Netscapen pitäisi tukea ohjelmointikieltä, joka on upotettu sivun HTML-koodiin [ 19 ] .
Brendan Eichin lisäksi [18 ] Netscape Communicationsin perustaja [20] Mark Andressen ja Sun Microsystemsin perustaja Bill Joy osallistuivat kehitykseen : jotta ehtii viimeistelläselaimen julkaisun kielen parissa. , yritykset solmivat kehitysyhteistyösopimuksen [21] . He asettivat tavoitteekseen tarjota "kielen liimaamiseen" verkkoresurssin muodostaville osille: kuville, laajennuksille, Java-sovelmille, mikä olisi kätevä verkkosuunnittelijoille ja ohjelmoijille, joilla ei ole korkeaa pätevyyttä [18] .
Kielen nimi oli alun perin Mocha [23] [24] [25] Mark Andreessenin [22] ehdotuksesta , Brendan Eich otti sen käyttöön kymmenen päivän kuluessa, ja se sisällytettiin ensimmäisen kerran Netscape 2:n pre-alpha-versioon [22] . . Sitten se nimettiin uudelleen LiveScriptiksi [25] [26] ja se oli tarkoitettu sekä asiakaspuolen ohjelmointiin että palvelinpuolen ohjelmointiin (jossa sen nimi oli LiveWire) [21] . Syntaksiin vaikuttivat C- ja Java-kielet , ja koska Java oli tuolloin muotisana [18] [21] , LiveScript nimettiin uudelleen JavaScriptiksi [27] 4. joulukuuta 1995, lisensoitu Sunilta . Netscapen ja Sunin edustajien JavaScript-ilmoitus tapahtui Netscape Navigatorin toisen beta-version julkaisun aattona [18] . Se ilmoittaa, että 28 johtavaa IT-yritystä on ilmaissut aikovansa käyttää JavaScriptiä avoimen standardiobjektin komentosarjakielenä tulevissa tuotteissaan [28] .
Vuonna 1996 Microsoft julkaisi JavaScript-kielen analogin nimeltä JScript . Tämä kieli julkistettiin 18. heinäkuuta 1996 [29] . Ensimmäinen tätä toteutusta tukeva selain oli Internet Explorer 3.0.
Netscapen [30] [31] aloitteesta ECMA - yhdistys standardoi kielen . Standardoitua versiota kutsutaan nimellä ECMAScript , jota kuvaa ECMA-262- standardi . Ensimmäinen versio spesifikaatiosta vastasi JavaScript-versiota 1.1 sekä kieliä JScript ja ScriptEasy [13] [21] .
Douglas Crockford väittää teoksessa The World 's Usein väärinkäsitetty ohjelmointikieli on tullut maailman suosituimmaksi ohjelmointikieleksi [ 32] , että JavaScript on ottanut johtavan aseman AJAX :n kehityksen ansiosta, kun selaimesta on tullut yleisin sovellusten toimitusjärjestelmä. Hän panee merkille myös JavaScriptin kasvavan suosion, sen, että tämä kieli on upotettu sovelluksiin, korostaa kielen merkitystä.
Mukaan TIOBE Index , joka perustuu Google , MSN , Yahoo ! , Wikipedia ja YouTube , huhtikuussa 2015 JavaScript oli 6. sijalla (vuosi sitten - 9.) [33] .
Black Duck Softwaren [34] mukaan JavaScriptin käyttö on ollut nousussa avoimen lähdekoodin ohjelmistokehityksessä . 36 % elokuun 2008 ja elokuun 2009 välisenä aikana julkaistuista projekteista käyttää JavaScriptiä, yleisimmin käytettyä ohjelmointikieltä, jonka suosio kasvaa nopeasti. 80 % avoimen lähdekoodin ohjelmistoista käyttää C-, C++-, Java-, Shell- ja JavaScriptiä. JavaScript on kuitenkin ainoa näistä kielistä, jonka käyttöosuus on kasvanut (yli 2 prosenttia, jos lasketaan koodiriveinä) [35] .
JavaScript on suosituin ohjelmointikieli, jota käytetään asiakaspuolen verkkosovellusten kehittämiseen [36] [37] .
JavaScript on oliokieli , mutta kielessä [38] [39] käytetty prototyyppi aiheuttaa eroja objektien kanssa työskentelyssä perinteisiin luokkasuuntautuneisiin kieliin verrattuna. Lisäksi JavaScriptillä on useita toiminnallisille kielille ominaisia ominaisuuksia - toimii ensiluokkaisina objekteina, objektit luetteloina, currying , anonyymit toiminnot , sulkemiset [40] - mikä antaa kielelle lisää joustavuutta.
Huolimatta C:n samankaltaisesta syntaksista, JavaScriptillä on perustavanlaatuisia eroja C-kieleen verrattuna :
Kielestä puuttuu sellaisia hyödyllisiä asioita [41] , kuten:
JavaScriptin syntaksi on paljon kuin C:n ja Javan syntaksi , mutta semanttisesti kieli on paljon lähempänä Self , Smalltalk tai jopa Lisp [32] [42] [Specification 2] .
JavaScriptissä:
Rakenteellisesti JavaScript voidaan esittää kolmen erillisen osan liittona [43] [44] [45] [46] :
Harkittaessa JavaScriptiä muissa kuin selainympäristöissä, selainobjektimallia ja dokumenttiobjektimallia ei ehkä tueta [45] .
Dokumenttiobjektimallia pidetään joskus erillisenä kokonaisuutena JavaScriptistä [47] [48] [Specification 3] , mikä on yhdenmukainen DOM:n määritelmän kanssa kielestä riippumattomana asiakirjarajapinnana [49] [~ 3] . Sitä vastoin useat kirjoittajat katsovat, että BOM ja DOM liittyvät läheisesti toisiinsa [50] [51] .
YdinECMAScript ei ole selainkieli, eikä se määrittele syöttö- ja tulostusmenetelmiä [43] . Se on pikemminkin perusta komentosarjakielten rakentamiselle. ECMAScript-spesifikaatio kuvaa tietotyyppejä, ohjeita, avainsanoja, varattuja sanoja, operaattoreita , objekteja, säännöllisiä lausekkeita rajoittamatta johdettujen kielten tekijöitä laajentamasta niitä uusilla komponenteilla.
SelainobjektimalliSelainobjektimalli on selainkohtainen osa kieltä [45] [52] , joka on kerros ytimen ja dokumenttiobjektimallin välillä [53] . Selainobjektimallin ensisijainen tarkoitus on hallita selainikkunoita ja olla vuorovaikutuksessa niiden kanssa. Jokaista selainikkunaa edustaa objekti window, keskeinen DOM-objekti. Selainobjektimallia ei ole tällä hetkellä standardoitu [45] [54] , mutta WHATWG [53] [Spec 4] ja W3C [44] [Spec 5] kehittävät määrittelyä .
Ikkunoiden hallinnan lisäksi selainobjektimallissa selaimet tukevat tyypillisesti seuraavia entiteettejä [53] [54] :
Document Object Model on sovellusohjelmointirajapinta HTML- ja XML - dokumenteille [55] . DOM:n mukaan asiakirja (esimerkiksi verkkosivu) voidaan esittää objektien puuna, jolla on useita ominaisuuksia, joiden avulla voit suorittaa sen kanssa erilaisia käsittelyjä:
JavaScript-koodin lisäämiseksi sivulle voit käyttää <script></script>[Specification 6] -tageja , joita suositellaan, mutta ei pakollisia, sijoitettavaksi <head>. Yhdessä asiakirjassa voi olla mikä tahansa määrä säiliöitä <script>. Attribuutti type="text/javascript"on valinnainen, tätä arvoa käytetään oletuksena [56] .
Skripti, joka näyttää modaalisen ikkunan , jossa on klassinen teksti "Hei, maailma!" selaimen sisällä:
< script type = "application/javascript" > alert ( 'Hei, maailma!' ); </ script >
HTML-spesifikaatio kuvaa joukon attribuutteja, joita käytetään tapahtumakäsittelijöiden määrittämiseen [Specification 7] . Käyttöesimerkki:
< a href = "delete.php" onclick = "confirm('Oletko varma?'); return false;" > Poistaa </a> _ _Yllä olevassa esimerkissä linkkiä napsauttaessa toiminto confirm('Вы уверены?');kutsuu modaalisen ikkunan, jossa on merkintä "Oletko varma?", mutta return false;estää siirtymisen linkkiin. Tämä koodi toimii tietysti vain, jos selaimessa on JavaScript-tuki käytössä, muuten linkkiä seurataan ilman varoitusta.
JavaScript-koodin käyttäminen sivumerkintöjen yhteydessä katsotaan huonoksi käytännöksi huomaamattomassa JavaScriptissä . Analoginen (edellyttäen, että linkissä on tunniste alertLink)
<a id="alertLink"> _ _ _ _ Poistaa </a> _ _Yllä oleva esimerkki voi olla esimerkiksi seuraava JavaScript-katkelma:
ikkuna . lataus = () => { const linkWithAlert = asiakirja . getElementById ( 'alertLink' ); linkWithAlert . addEventListener ( 'napsauta' , async () => { if ( vahvista ( 'Oletko varma?' )) { await fetch ( 'delete' , { method : 'POISTA' }) } ) }; Siirtyminen erilliseen tiedostoonOn olemassa kolmas tapa yhdistää JavaScript - kirjoita komentosarja erilliseen tiedostoon ja yhdistä se sitten rakenteen avulla
< body > < script type = "application/javascript" src = "http://Path_to_coscript_file" > </ script > </ body > SkriptielementinKomentosarjaelementillä, jota käytetään laajalti yhteyden muodostamiseen JavaScript-sivulle, on useita määritteitä.
RFC - 4329- työehdotus , joka määrittää [57] JavaScriptin mukaisen MIME-tyypin, toteaa :
mediatyypit
jotka on myös määritelty tässä asiakirjassa, on tarkoitettu käytännön käyttöön ja niitä tulisi suosia.
Alkuperäinen teksti (englanniksi)[ näytäpiilottaa] Ylimmän tason "teksti"-tyypin käyttö tällaisessa sisällössä tunnetaan ongelmallisena. Tämä asiakirja siis määrittelee text/javascriptja text/ecmascriptmerkitsee ne "vanhentuneiksi". Yllä olevassa osassa lueteltujen kokeellisten ja rekisteröimättömien mediatyyppien käyttöä ei suositella.mediatyypit,
Samaan aikaan kieli ( ) -attribuutti aktiivisesta käytöstä huolimatta (vuonna 2008 tämä attribuutti oli [58]language="JavaScript" -tunnisteen yleisimmin käytetty attribuutti ) on vanhentunut, ei ole DTD :ssä , ja siksi sitä pidetään virheellisenä [ 59] . <script>
JavaScriptiä käytetään verkkosovellusten asiakaspuolella: asiakas-palvelin-ohjelmat, joissa selain on asiakas ja web-palvelin on palvelin, joiden logiikka on hajautettu palvelimen ja asiakkaan välillä. Tietojen vaihto web-sovelluksissa tapahtuu verkon kautta. Yksi tämän lähestymistavan etu on se, että asiakkaat ovat riippumattomia käyttäjän tietystä käyttöjärjestelmästä, joten verkkosovellukset ovat monialustaisia palveluita.
AJAXJavaScriptiä käytetään AJAXissa , joka on suosittu tapa rakentaa interaktiivisia käyttöliittymiä verkkosovelluksille, johon liittyy "tausta" asynkroninen tiedonsiirto selaimen ja verkkopalvelimen välillä. Seurauksena on, että tietoja päivitettäessä verkkosivu ei lataudu kokonaan uudelleen ja verkkosovellusliittymästä tulee nopeampi kuin se olisi perinteisellä lähestymistavalla (ilman AJAX:ia).
CometComet on laaja käsite, joka kuvaa verkkosovellusten toimintaa pysyviä HTTP-yhteyksiä käyttäen, jolloin verkkopalvelin voi lähettää tietoja selaimeen ilman selaimen lisäpyyntöjä. Nämä sovellukset käyttävät tekniikoita, joita selaimet tukevat suoraan. Erityisesti he käyttävät laajasti JavaScriptiä.
Selaimen käyttöjärjestelmätJavaScriptiä käytetään laajalti selainkäyttöjärjestelmissä . Joten esimerkiksi IndraDesktop WebOS :n lähdekoodissa on 75 % JavaScriptiä, IntOS- selaimen käyttöjärjestelmäkoodissa 70 %. JavaScriptin osuus eyeOS :n lähdekoodista on 5 %, mutta myös tässä käyttöjärjestelmässä JavaScriptillä on tärkeä rooli osallistumalla asiakkaan renderöintiin ja välttämättömänä mekanismina asiakkaan ja palvelimen välisessä kommunikaatiossa [60 ] .
JavaScriptiä käytetään luomaan pieniä ohjelmia, jotka on merkitty selaimeen kirjanmerkkeihin. Tämä käyttää URL-osoitteita javascript:[61] -määritteen kanssa .
Selaimen käyttäjäskriptit ovat JavaScript-ohjelmia, jotka toimivat käyttäjän selaimessa, kun sivu ladataan. Niiden avulla voit täyttää automaattisesti lomakkeita, muotoilla sivuja uudelleen, piilottaa ei-toivotun sisällön ja upottaa sisältöä, jonka haluat näyttää, muuttaa verkkosovellusten asiakaspuolen toimintaa, lisätä sivulle ohjaimia ja niin edelleen.
Mozilla Firefox käyttää Greasemonkey -laajennusta käyttäjien komentosarjojen hallintaan . Opera [62] [63] [64] ja Google Chrome [65] tarjoavat tukea käyttäjäskripteille ja mahdollisuuden suorittaa useita Greasemonkey-skriptejä.
JavaScriptillä kirjoitetut sovellukset voivat toimia palvelimilla, joissa on Java 6 tai uudempi [66] . Tätä seikkaa käytetään rakentamaan palvelinsovelluksia, jotka sallivat JavaScriptin käsittelyn palvelinpuolella.
Java 6:n lisäksi on olemassa useita alustoja, jotka käyttävät olemassa olevia JavaScript-moottoreita (tulkkeja) palvelinsovellusten ajamiseen. (Pääsääntöisesti puhumme aiemmin luotujen moottoreiden uudelleenkäytöstä JavaScript-koodin suorittamiseen WWW-selaimissa.)
Nimi | Käytetty JavaScript-moottori | Kielet, joilla moottori ja alusta on kirjoitettu | Lisenssi |
---|---|---|---|
Jaxer [67] | Hämähäkkiapina [68] | C++, C | GPL 3 [69] |
sinnikkäät puitteet [70] | Sarvikuono | Java | Muokattu BSD-lisenssi [71] |
Helma [72] | Sarvikuono | Java, JavaScript | BSD:n kaltainen Helma License 2.0 [73] |
v8cgi | V8 | C++, JavaScript | BSD-lisenssi [74] |
node.js | V8 | C++ | MIT-lisenssi [75] |
gopherjs | mennä | mennä | BSD-lisenssi |
Palvelinpuolen JavaScriptiä käytetään Google -projekteissa [76] . Esimerkiksi Google Sites sallii mukauttamisen käyttämällä Rhino-moottorin suorittamia JavaScript-skriptejä [77] .
Palm -mobiililaitteiden siirtyminen käyttämään Palm webOS :ää käyttöjärjestelmänä ja Mojo SDK kehityspakettina [78] mahdollistaa JavaScriptin käytön mobiilisovelluskehityskielenä [79] [80] .
Widget on apuminiohjelma, jonka graafinen moduuli sijoitetaan vastaavan pääohjelman työtilaan , joka on tarkoitettu työtilan sisustamiseen, viihdyttämiseen, yksittäisten työtehtävien ratkaisemiseen tai nopeaan tiedon hakemiseen Internetistä ilman käyttämällä verkkoselainta. JavaScriptiä käytetään sekä widgetien että widget-koneiden toteuttamiseen. Erityisesti Apple Dashboard , Microsoft Gadgets , Yahoo! Widgetit , Google Gadgetit , Klipfolio Dashboard .
JavaScriptiä käytetään sovellusohjelmistojen kirjoittamiseen . Esimerkiksi 16,4 % Mozilla Firefoxin lähdekoodista on kirjoitettu JavaScriptillä.
Google Chrome OS käyttää verkkosovelluksia sovellusohjelmistoina [ 81] .
GNOME - työpöytäympäristössä on mahdollisuus luoda JavaScript-ohjelmia, jotka toimivat GNOME-kirjastoissa käyttämällä Gjs , Seed [82] .
JavaScript löytää käyttöä myös komentosarjakielenä sovellusobjektien käyttämiseen. Mozilla-alusta ( XUL / Gecko ) käyttää JavaScriptiä. Kolmannen osapuolen tuotteista esimerkiksi Java on sisällyttänyt sisäänrakennetun Rhino - pohjaisen JavaScript-tulkin versiosta 6 lähtien [66] . JavaScript-komentosarjoja tuetaan Adobe-sovelluksissa, kuten Adobe Photoshop , Adobe Dreamweaver , Adobe Illustrator ja Adobe InDesign .
JavaScriptiä käytetään toimistosovelluksissa rutiinitoimintojen automatisointiin, makrojen kirjoittamiseen ja verkkopalvelujen käytön järjestämiseen.
Microsoft OfficeExcel Services 2010 lisäsi [83] kaksi uutta sovellusohjelmointirajapintaa: REST API ja JavaScript Object Model ( JSOM ).
JavaScript on yksi ohjelmointikielistä, jota käytetään makrojen kirjoittamiseen sovelluksissa, jotka ovat osa OpenOffice.org:a [85] . OpenOffice.org integroi Rhino JavaScript -tulkin [86] . Joulukuusta 2009 lähtien JavaScript-tuki oli rajoitettu. Rajoitukset, jotka liittyvät [86] OpenOffice.org-makrojen kehittämiseen JavaScriptissä:
OpenOffice.orgissa on JavaScript-editori ja virheenkorjaus [87] .
JavaScriptillä on propedeuttinen arvo, mikä mahdollistaa intensiivisen ohjelmointikäytännön ja tietojenkäsittelytieteen opetuksessa käytettyjen teknologioiden yhdistelmän [ 88 ] . Tämän kielen opettaminen koulussa antaa sinun luoda perustan verkko-ohjelmoinnin oppimiselle , käyttää luovia projekteja luokkahuoneessa [89] . Vastaava kurssi mahdollistaa tietojenkäsittelytieteen syvällisen opiskelun, ja se on järkevää sisällyttää perusteellisen koulutuksen valinnaisiin kursseihin [90] .
JavaScript on sopiva kieli pelien ohjelmoinnin oppimiseen . Vaihtoehtoihin verrattuna se on toiminnallisesti riittävä, helppo oppia ja käyttää, vähentää oppimisen monimutkaisuutta, motivoi oppijoita jakamaan pelinsä muiden kanssa [91] .
Klassisten algoritmien , tekniikoiden ja tietorakenteiden JavaScript-toteutusta koskevat osat , jotka eivät sisälly Nicholas Zakasin kirjaan "Professional JavaScript for Web Developers" , toimivat [92] Computer Science in JavaScript -projektin [~ 4] alussa .
JavaScript | Vastaava JScript-versio | Merkittäviä muutoksia |
---|---|---|
1.0 ( Netscape 2.0, maaliskuu 1996) | 1.0 ( IE 3.0: n varhaiset versiot , elokuu 1996) | JavaScript-kielen alkuperäinen versio. |
1.1 (Netscape 3.0, elokuu 1996) | 2.0 (IE 3.0:n uudemmat versiot, tammikuu 1997) | Tässä versiossa objekti toteutettiin Arrayja vakavimmat virheet korjattiin. |
1.2 (Netscape 4.0, kesäkuu 1997) | Toteutettu kytkin switch, säännölliset lausekkeet. Käytännössä ECMA-262-spesifikaatioiden ensimmäisen painoksen mukainen. | |
1.3 (Netscape 4.5, lokakuu 1998) | 3.0 (IE 4.0, lokakuu 1997) | Yhteensopiva ECMA-262:n ensimmäisen painoksen kanssa. |
1.4 (vain Netscape-palvelin) | 4.0 ( Visual Studio 6, ei IE-versiota) | Koskee vain Netscape-palvelintuotteita. |
5.0 (IE 5.0, maaliskuu 1999) | ||
5.1 (IE 5.01) | ||
1.5 (Netscape 6.0, marraskuu 2000; myös Netscapen ja Mozillan uudemmat versiot ) |
5.5 (IE 5.5, heinäkuu 2000) | Versio 3 (joulukuu 1999). Yhteensopiva ECMA-262-spesifikaation kolmannen painoksen kanssa. |
5.6 (IE 6.0, lokakuu 2001) | ||
1.6 ( Gecko 1.8, Firefox 1.5, marraskuu 2005) | Versio 3, jossa on joitain yhteensopivia parannuksia: E4X , lisäyksiä Array(esim. Array.prototype.forEach), yksinkertaistuksia Arrayja String[93] | |
1.7 (Gecko 1.8.1, Firefox 2.0, syksy 2006), JavaScript-laajennus 1.6 | Versio 3, johon on lisätty kaikki JavaScript 1.6:n parannukset, Pythonin generaattorit ja luetteloiden ymmärtäminen , lohkolaajuuksien käyttö ja rakenteen purkaminen ( ) [ 94] . [a*a for (a in iter)]letvar [a, b] = [1, 2] | |
JScript .NET ( ASP.NET ; ei IE-versiota) | (JScript .NET:n uskotaan kehitetyn muiden ECMA :n jäsenten panoksella ) | |
1.8 (Gecko 1.9, Firefox 3.0, syksy 2008), JavaScript-laajennus 1.7 | Uusi merkintä funktioille, jotka ovat samanlaisia kuin tyypilliset lambda-lausekkeet , generaattorit , uudet menetelmät iteratiiviseen taulukkokäsittelyyn reduce()ja reduceRight()[95] . | |
1.8.1 (Gecko 1.9.1, Firefox 3.5) | Natiivi JSON-tuki, getPrototypeOf()y -menetelmä, , , y- Objectmenetelmät [96]trim()trimLeft()trimRight()String | |
2.0 | Versio 4 (työ kesken [97] , ECMA:n varaama nimi, mutta ei käytetty julkaisuun [Spesifikaatio 9] ) | |
Versio 5 (aiemmin ECMAScript 3.1 [97] . Valmistettu 3. joulukuuta 2009 [98] [99] .) |
Verkkosovellusten kehittämisessä käytetään JavaScript-kirjastoja korkean abstraktiotason tarjoamiseksi ja hyväksyttävän selaimen välisen yhteensopivuuden saavuttamiseksi. Ne ovat kokoelma uudelleenkäytettäviä esineitä ja toimintoja. Merkittäviä JavaScript-kirjastoja ovat muun muassa React.js , Vue.js , Ember.js , Adobe Spry , AngularJS , Svelte , Dojo , , jQuery , Mootools , Prototype , Qooxdoo ja Underscore .
JavaScriptissä viankorjausohjelmien käyttö on erityisen hyödyllistä kehitettäessä suuria, ei-triviaaleja ohjelmia, koska eri selainten toteutuksissa on eroja (erityisesti Document Object Model ). Monissa selaimissa on sisäänrakennettu debuggeri.
Internet Explorerissa on kolme debuggeria: Microsoft Visual Studio on täydellisin, jota seuraa Microsoft Script Editor ( Microsoft Officen [100] komponentti ) ja lopuksi ilmainen Microsoft Script Debugger, paljon yksinkertaisempi kuin kaksi muuta. Ilmainen Microsoft Visual Web Developer Express tarjoaa rajoitetun version JavaScript-virheenkorjausominaisuuden kanssa Microsoft Visual Studiossa. IE:n kahdeksannessa versiossa kehittäjien työkalujen ohella ilmestyi sisäänrakennettu debuggeri.
Operalla on myös oma debuggeri, Opera Dragonfly [101] .
Firefoxissa kehittämäsi verkkosovellukset voidaan korjata sisäänrakennetuilla Firefox Developer Tools -työkaluilla.
Safari sisältää JavaScript WebKit Web Inspector [102] -virheenkorjausohjelman . Sama debuggeri on saatavilla myös muissa WebKitiä käyttävissä selaimissa : Google Chrome, Arora , Rekonq , Midori jne.
Useimmat JavaScript-koodin automatisoidut testauskehykset edellyttävät testien suorittamista selaimessa. Tämä tehdään käyttämällä HTML-sivua, joka on testikonteksti , joka puolestaan lataa kaiken testin suorittamiseen tarvittavan. Ensimmäiset tällaiset puitteet olivat JsUnit (luotu vuonna 2001), Selenium (luotu vuonna 2004) [103] . Vaihtoehtona on suorittaa testit komentoriviltä. Tässä tapauksessa käytetään muita kuin selainympäristöjä, kuten Rhino [104] . Yksi ensimmäisistä tämän tyyppisistä työkaluista on Crosscheck, jonka avulla voit testata koodia emuloimalla Internet Explorer 6:n ja Firefoxin versioiden 1.0 ja 1.5 toimintaa [105] . Toinen esimerkki JavaScript-koodin automaattisesta testauskehyksestä, joka ei käytä selainta testien suorittamiseen, on John Resigin luoma env.js-kirjasto. Se käyttää Rhinoa ja sisältää selainympäristön ja DOM:n emuloinnin [106] .
Blue Ridge, Ruby on Rails -verkkosovelluskehyksen laajennus , mahdollistaa JavaScript-koodin testaamisen sekä selaimessa että sen ulkopuolella. Tämä saavutetaan käyttämällä Screw.Unit automatisoitua testauskehystä ja Rhinoa env.js:n kanssa [107] .
Muiden kuin selaimen testausjärjestelmien suurin ongelma on, että ne käyttävät emulaatioita todellisten ympäristöjen sijaan, joissa koodi suoritetaan. Tämä johtaa siihen, että testien onnistunut läpäisy ei takaa, että koodi toimii oikein selaimessa [108] [109] . Selainta käyttävien testausjärjestelmien ongelmana on niiden kanssa työskentelyn monimutkaisuus, tarve suorittaa rutiininomaisia ei-automaattisia toimia [110] . Tämän ratkaisemiseksi JsTestDriver, Googlen kehittämä automaattinen testauskehys, käyttää palvelinta, joka kommunikoi selaimien kanssa testauksen suorittamiseksi [111] . Selenium Remote Control, joka on osa Seleniumin automatisoitua testauskehystä, toimii samalla tavalla: se sisältää palvelimen, joka käynnistää ja pysäyttää selaimet ja toimii HTTP-välityspalvelimena niille lähetettäville pyynnöille [112] . Lisäksi Selenium sisältää Selenium Gridin, jonka avulla voit testata JavaScript-koodia samanaikaisesti eri tietokoneilla eri ympäristöissä, mikä vähentää testin suoritusaikaa [113] . QUnit- ( jQuery -kirjasto ), UnitTestJS- ( prototyyppikirjasto ), JSSpec- ( MooTools -kirjasto ), JsUnit-, Selenium- ja Dojo Objective Harness JavaScript -testauskehysten tukema Testswarm on hajautettu jatkuva integraatiotuki [114] .
Negatiivinen ominaisuus, joka JavaScript-koodin testauskehyksellä voi olla, on riippuvuuksien esiintyminen. Tämä luo riskin, että testattava koodi, joka läpäisee testit, epäonnistuu ympäristössä, jossa ei ole näitä riippuvuuksia. Esimerkiksi JsUnitTestin alkuperäinen versio, prototyyppikirjaston testaamiseen luotu ja käytetty kehys, riippui itse Prototypestä muuttaakseen globaalissa laajuudessa olevien objektien ominaisuuksia [115] . Testaustyökalun sisällyttäminen JavaScript-kirjastoon on yleinen käytäntö. Joten YUI Test 3 on osa Yahoo! Käyttöliittymäkirjasto ja sitä voidaan käyttää turvallisesti mielivaltaisen JavaScript-koodin testaamiseen [116] . QUnit on jQueryn kehittäjien luoma automaattinen testauskehys [117] .
JavaScriptin standardointi edellytti tavaramerkkiongelmien välttämistä, joten ECMA 262 -standardi kutsuu kieltä ECMAScriptiksi, josta on julkaistu kolme versiota sen jälkeen, kun työ aloitettiin marraskuussa 1996.
Objective-J on tiukka, kompakti JavaScriptin superjoukko, joka lisää JavaScriptiin:
Microsoftin VBScript , kuten JavaScript, voidaan ajaa web-sivujen asiakaspuolella. VBScriptillä on Visual Basicista johdettu syntaksi, ja sitä tuetaan vain Internet Explorerissa .
JSON eli JavaScript Object Notation on yleiskäyttöinen tiedonvaihtomuoto, joka määritellään JavaScriptin osajoukoksi.
Scheme on myös JavaScriptin sisarkieli, koska molemmat tarjoavat runsaasti toiminnallisia ohjelmointiominaisuuksia: JavaScript on dynaaminen kieli, tukee joustavia taulukoita, voi helposti simuloida s-lausekkeita ja tukee lambda-lausekkeita [118] .
JavaScript ja JavaYleinen väärinkäsitys on, että JavaScript on samankaltainen tai läheisesti sukua Javalle , se ei ole [32] . Molemmilla kielillä on C-tyyppinen syntaksi, ne ovat oliokeskeisiä ja niitä käytetään yleisesti laajalti asiakaspuolen verkkosovelluksissa. Tärkeitä eroja ovat mm.
JavaScript toteuttaa useiden ohjelmointikielten tulkit, mikä mahdollistaa web-selaimen käytön niille ajon aikana. Niitä voidaan käyttää esimerkiksi koulutustarkoituksiin [119] .
HotRuby on Ruby - virtuaalikoneen ilmainen toteutus JavaScriptissä ja Flashissa . Mahdollistaa YARV -käännöksen tuloksena olevan tavukoodin suorittamisen . Toteuttaa suurimman osan Ruby-kieliopista. Poikkeusmekanismia ja useimpia sisäänrakennettuja toimintoja ja luokkia ei ole vielä toteutettu [120] . HotRubyn avulla voit käyttää rubiinikomentotiedostoja verkkosivuilla. Tätä varten rubiinikoodi tulee sijoittaa lohkoon:
< script type = "text/ruby" > ... </ script >HotRuby purkaa sen, lähettää sen etäskriptille käännettäväksi ja näyttää sitten tulokset [121] -sivulla . Tämä toteutus mahdollistaa pääsyn Rubysta JavaScript-objekteihin [122] .
Kieli | Toteutuksen nimi | Päätekijät | Lisenssi |
---|---|---|---|
JavaScript | s-mr [123] | Andrei Formiga | UusiBSD |
jälkikirjoitus | WPS [124] | Tom Hlavaty | ? |
Kokoonpanija MOS Technology 6502 :lle | 6502asm [125] | Stian Soreng | GPL |
Tavoite-J | Cappuccino [126] | Ross Boucher | LGPL |
Haskell | ycr2js [127] | Tom Shackell, Neil Mitchell, Andrew Wilkinson, Mike Dodds, Bob Davie, Dimitry Golubovsky | yksinkertainen salliva lisenssi |
Prolog | Monash Toy Prologue [128] | Lloyd Allison | ? |
ioctls [129] | Jan Grant | ? | |
kissa | Kissatulkki [130] | Christopher Diggins | julkista |
Kaavio | BiwaScheme [131] | Yutaka Hara | MIT |
PERUS | Melko PERUS [132] | Nikko Strom | ilmainen omistusoikeus |
Lilja_ | Lilja [133] | Bill Orcutt | MIT |
Eteenpäin | wForth [134] | K Jacobson | ? |
PHP | phype [135] | ||
Python 3 | PyPy.js | ? | ? |
Oberon 07 | oberonjs [136] | Vlad Folts | MIT |
Jotkut ohjelmointikielet tarjoavat tuen vuorovaikutukseen JavaScript-koodin kanssa.
Tähän mennessä JavaScript-tuen tarjoavat kaikkien yleisimmin käytettyjen selainten nykyaikaiset versiot. Internet Explorer , Opera , Mozilla Firefox , Safari , Google Chrome tukevat täysin ECMA-262:n 3. painosta. Samaan aikaan Mozilla Firefox yritti ottaa käyttöön tuen spesifikaatioiden neljännelle painokselle, ja ensimmäinen selain, jossa 3.1-spesifikaatiolle puuttui tuki, oli Internet Explorer 8 [140] .
Suosittujen selainten kehittäjien spesifikaation toteutuksessa tekemät virheet ovat yleensä vähäisiä [141] . Marraskuusta 2009 lähtien asiakirjaobjektimallilla on rajoitetumpi tuki [142] .
Kielen luojan mukaan Microsoftin tuki Internet Explorerissa yhdelle olemassa olevalle nopealle JavaScript-moottorille , jota käytetään ja jota käytetään muissa selaimissa, voi johtaa sovellusten syntymiseen, jotka toimivat kolmiulotteisen grafiikan kanssa, JavaScriptillä kirjoitettuja 3D-pelejä, JavaScriptin käyttö tehtävissä, joissa aiemmin käytettiin Adobe Flash -tekniikkaa [143] .
Selaimen yhteensopivuuden regressiotestaus ECMA-262-spesifikaation kolmannen painoksen kanssa voidaan suorittaa [144] [145] käyttämällä Googlen kehittämää työkalua ECMAScript-määrityksen Sputnik yhteensopivuuden testaamiseen , joka sisältää yli viisi tuhatta testiä tapauksissa [146] ja nimettiin venäläisen Google-tiimin [146] mukaan sekä Juri Zaitsevin tai Google -palvelun [148] kirjoittaman sputniktests-webrunner [147] -kuoren mukaan . Sputnikissa olevia testitapauksia päivitetään ECMA-262-spesifikaatioiden viidennen painoksen julkaisun yhteydessä, mikä heijastelee muutoksia edelliseen versioon verrattuna [149] .
ECMAScript 5 Conformance Suite [150] on Microsoftin BSD-lisenssillä [151] julkaisema testipaketti varmistaakseen, että ECMAScript-kielen toteutus on viidennen painoksen spesifikaatioiden mukainen. 12. maaliskuuta 2010 paketissa oli 1236 testitapausta, sen versio oli 0.2 alfa ja latausten määrä kolmen kuukauden aikana oli 178 [152] .
Mozillan [153] [154] JavaScript Test Suite on saatavilla JavaScript-toteutusten oikeellisuuden testaamiseen .
JavaScriptin avulla mahdolliset haitallisen koodin tekijät voivat suorittaa sen missä tahansa verkon tietokoneessa yksinkertaisesti avaamalla siinä olevan verkkosivun. Tästä seuraa kaksi perustavanlaatuista rajoitusta:
Lisäksi selainvalmistajat ottavat käyttöön lisärajoituksia reagoidakseen väärinkäytöksiin. Näin syntyi erityisesti kielto avata ikkuna, jonka yhden sivun koko on alle sata pikseliä [155] .
Sivustojen väliset haavoittuvuudetYleinen JavaScriptin ongelma on sivustojen välinen komentosarja tai XSS, joka rikkoo verkkotunnuksen rajoitussääntöä. XSS-haavoittuvuuksia esiintyy tilanteissa, joissa hyökkääjä pystyy sijoittamaan komentosarjan sivulle, joka näytetään käyttäjälle. Tässä tapauksessa komentosarja saa pääsyn sivustolle tämän käyttäjän oikeuksilla, mikä joissakin tapauksissa avaa mahdollisuuden lähettää luottamuksellisia tietoja ja tehdä ei-toivottuja tapahtumia .
XSS-haavoittuvuuksia esiintyy myös selainkehittäjien tekemien virheiden vuoksi [157] .
Toinen sivustojen välinen haavoittuvuus on sivustojen välinen pyyntöväärennös tai CSRF. Se perustuu hyökkääjän sivuston kykyyn pakottaa käyttäjän selain suorittamaan ei-toivottu toiminto kohdesivustolla (esimerkiksi rahansiirto). Tämä on mahdollista, jos kohdesivusto luottaa vain HTTP-evästeisiin tai valtuutuspyyntöihin. Tässä tapauksessa hyökkääjän sivustokoodin käynnistämät pyynnöt suoritetaan samalla tavalla kuin käyttäjän pyynnöt, jos hän on valtuutettu kohdesivustolle. Yksi keino suojautua CSRF:tä vastaan on suorittaa todennus jokaiselle pyynnölle, joka johtaa peruuttamattomiin seurauksiin. HTTP -viittauksen jäsentäminen voi myös auttaa .
Huonosti sijoitettu asiakaspuolen luottamusAsiakassovellusten kehittäjien, riippumatta siitä, käyttävätkö he JavaScriptiä tai eivät, on oltava tietoisia siitä, että jälkimmäinen voi olla hyökkääjien hallinnassa. Siksi mikä tahansa asiakaspuolen tarkistus voidaan ohittaa, JavaScript voi joko olla käynnissä tai ei. Hämärtynyt koodi voidaan palauttaa ; lomaketiedot voidaan lähettää palvelimelle ilman JavaScript- tarkistusta ; komentosarjat voidaan poistaa osittain käytöstä, joten esimerkiksi luotettavaa suojausta kuvien tallentamista vastaan JavaScriptin avulla ei voida toteuttaa [158] ; on erittäin harkitsematonta upottaa salasana asiakkaalla käynnissä olevaan JavaScriptiin, josta hyökkääjä voi löytää sen.
Virheet selaimessa, laajennuksissa ja laajennuksissaJavaScript tarjoaa käyttöliittymän monenlaisiin selaimen ominaisuuksiin, joista osa voi sisältää virheitä, kuten puskurin ylivuotoja . Tämän avulla voit kirjoittaa komentosarjoja, jotka aiheuttavat mielivaltaisen koodin suorittamisen käyttäjän järjestelmässä.
Samanlaisia vikoja on löydetty yleisesti käytetyistä selaimista, kuten Mozilla Firefox [159] , Internet Explorer [160] , Safari [161] . Tunnistaessaan mahdollisesti vaarallisia selaimen virheitä ja hankkiessaan tietoa toteutetuista hyväksikäytöistä valmistaja ja tietoturvaasiantuntijat suosittelevat JavaScriptin poistamista käytöstä ennen korjaustiedoston julkaisemista [162] [163] .
Plugins , kuten pelaajat , Macromedia Flash ja monet ActiveX - komponentit, jotka ovat oletuksena saatavilla Internet Explorerissa, voivat myös sisältää bugeja, joita on käytetty JavaScriptin kanssa, kuten on tapahtunut ennenkin [164] [165] .
Mozilla Firefoxin laajennuksia ei ole eristetty toisistaan: yksi laajennus voi korjata toisen, jota hyökkääjät voivat hyödyntää. Roberto Suggi Liverani ja Nick Freeman esittelivät SecurityByte & Owasp AppSec Asia 2009 -tapahtumassa kolme hyväksikäyttöä suosituissa Firefox-laajennuksissa, jotka on ladattu sivustolta yli 30 miljoonaa kertaa [166] .
Hiekkalaatikon toteutusvirheetSelaimet voivat käyttää JavaScriptiä hiekkalaatikon ulkopuolella esimerkiksi tiedostojen luomiseen ja poistamiseen tarvittavilla oikeuksilla. Tällaisia oikeuksia ei kuitenkaan pitäisi antaa verkosta tulevalle koodille.
Virheelliset oikeudet JavaScriptiin verkosta ovat olleet syynä sekä Internet Explorerin [167] että Mozilla Firefoxin [168] haavoittuvuuksiin .
Microsoft Windows sallii JavaScript-tiedostojen ajamisen tavallisten ohjelmien tapaan ilman hiekkalaatikkoa. Tämä mahdollistaa troijalaisten luomisen [169] .
JavaScript | |
---|---|
Ideoita | |
Kääntäjät | |
Moottorit | |
Kirjastot ja puitteet | |
Toimittajat | |
Työkalut |
|
Liittyvät tekniikat | |
Ihmiset | |
Kategoria |
ECMAScript | |||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Murteet |
| ||||||||||||
Moottorit ( vertailu ) |
| ||||||||||||
Kehykset , kirjastot |
| ||||||||||||
Ihmiset | |||||||||||||
muu |
|
Ohjelmointikielet | |
---|---|
|
Web ja verkkosivut | |
---|---|
maailmanlaajuisesti | |
Paikallisesti | |
Sivustojen ja palveluiden tyypit |
|
Luominen ja ylläpito | |
Asettelutyypit, sivut, sivustot |
|
Tekninen | |
Markkinointi | |
Yhteiskunta ja kulttuuri |