JavaScript on Netscape'i loodud objektorienteeritud programmeerimiskeel, mida peamiselt kasutatakse koos HTML'i ja CSS'iga, et veebisaite teha.
JavaScript on ECMAScripti standardiga defineeritud keele ülemhulk.
JavaScript | |
---|---|
Faililaiend | .js |
Paradigma | funktsionaalne, imperatiivne, objektorienteeritud (prototüübipõhine) |
Väljalaskeaeg | 1995 |
Looja | Brendan Eich |
Arendaja | Netscape Communications Corporation, Mozilla Foundation |
Viimane väljalase | ECMAScript 2023 (juuni 2023) |
Tüüpimine | dünaamiline, nõrk, pardi |
Mõjutatud keeltest | Self, C, Scheme, Perl, Python, Java |
Mõjutanud keeli | Objective-J, JScript, JScript .NET, Node.js, CoffeeScript, ActionScript |
Hoolimata nimest pole JavaScriptil kuigi palju ühist Javaga. Mõlemad keeled jagavad küll C-st pärit süntaksit ja on objektorienteeritud, kuid nende erinevused on suuremad kui sarnasused.
JavaScripti lõi Brendan Eich Netscape'is. Algselt kandis keel nimetust Mocha, siis LiveScript ja lõpuks JavaScript. Esimene JavaScripti toega veebibrauser oli 1995. aasta septembris välja lastud Netscape Navigator 2.0 (siis veel LiveScript). 1996. aasta augustis lisas Microsoft JavaScriptiga ühilduva keele JScript veebibrauserisse Internet Explorer 3.0.
JavaScripti standardiseeris Ecma International 1997. aasta juunis nime ECMAScript all. ECMAScript keskendub vaid keeleomadustele, aga JavaScript lisaks ka veebikeskkonnale.
Aastal 2010 on JavaScripti versiooniks 1.8.1. Viimastel aastatel on saanud JavaScripti areng uue tõuke tänu Ajax tehnoloogia tähelepanu saamisega.
Paljud peavad JavaScripti ülilihtsaks keeleks, mille abil saab lehele väikseid efekte lisada. Tegelikult pakub JavaScript laialdasi võimalusi väheste, kuid võimsate keelevahenditega.
Kõige laialdasemalt kasutatakse JavaScripti veebilehtedel. Seda peetakse koguni maailma populaarseimaks programmeerimiskeeleks. Kuid brauserid pole JavaScripti ainuke keskkond.
Väljaspool veebi on JavaScript kasutusel näiteks Adobe Readeris (JavaScript PDF-failides) ja Adobe Photoshopis. Arendamisel on OpenOffice.org-i makrode kirjutamise võimalus JavaScriptiga. Iga rakendus pakub enda sisseehitatud objekte, mille abil saab operatsioone teha (brauserites on selline objekt window).
JavaScripti süntaks pärineb suuresti C-st, millest on üle võetud if- ja switch-tingimuslaused, for- ja while-tsüklid ja -operaatorid. Javast pärinevad throw- ja try-catch-konstruktsioonid erindite viskamiseks ja püüdmiseks.
Hello world on programm, mis avab dialoogiakna:
alert("Hello world");
Alternatiivne variant, mis kirjutab teksti otse veebilehele:
document.write("Hello world");
Massiivide loomiseks saab kasutada eraldi literaali:
var myArray = [2, 3, 5, 7, 11];
Samuti objektide jaoks:
var myObject = {name: "John", age: 15};
Nii massiivide kui ka harilike objektide liikmetele pääseb ligi C-st tuttava konstruktsiooniga:
myArray[1]; // tagastab 3 myObject["name"]; // tagastab "John"
Lisaks saab nimekujulistele liikmetele ligi punkt-notatsiooniga:
myObject.name; // tagastab "John" myArray.length; // tagastab 5 (massiivi pikkuse)
JavaScripti objektide ja massiivide süntaksil põhineb JSON (JavaScript Object Notation) andmevahetusvorming, mida kasutatakse ohtralt koos Ajaxiga.
Funktsioone luuakse funktsiooniliteraali abil:
function factorial(n) { if (n > 1) { return n * factorial(n-1); } else { return 1; } }
Funktsioonile saab panna nime, nagu näites on tehtud, kuid saab kasutada ka anonüümseid funktsioone. Viimaseid on hea anda parameetritena kõrgemat järku funktsioonidele. Näiteks järgmise koodiga sorteeritakse massiivi kasutades võrdlemiseks anonüümset funktsiooni:
[4,7,1,3,6].sort(function(a, b) { return a > b ? 1 : (a < b ? -1 : 0); });
Üks levinud anonüümsete funktsioonide kasutus on kohalike muutujate globaalsesse nimeruumi sattumise vältimine. Selleks mähitakse kogu kood ühe suure anonüümse funktsiooni sisse, mis kohe käivitatakse:
(function(){ // ...kogu kood siia... })();
Kui on vaja luua mitu sarnaste omadustega objekti, luuakse esmalt konstruktorfunktsioon, mille prototype atribuut määrab ära loodavate objektide jagatud tunnused:
function Person(name) { this.name = name; } Person.prototype = { greet: function(person) { alert("Hello " + person.name + ", my name is " + this.name); } };
Seejärel saab new-operaatori abil luua objekte, mis viitavad konstruktorfunktsiooni Person prototüübile:
var john = new Person("John"); var mary = new Person("Mary"); john.greet(mary); // väljastab: Hello Mary, my name is John mary.greet(john); // väljastab: Hello John, my name is Mary
Siiani näeb kõik välja nagu klassipõhises objektorienteeritud programmeerimises. Kuid Person pole siiski klass, vaid hoopis dünaamilisem kooslus. Näiteks võime Personi prototüüpi jooksvalt täiendada ning kõik muudatused kajastuvad automaatselt selle konstruktoriga loodud objektides:
Person.prototype.age = 25; john.age; // tagastab: 25 mary.age; // tagastab: 25
Objektid aga võivad prototüübis defineeritud välju üle kirjutada:
john.age = 82; john.age; // nüüd 82 mary.age; // endiselt 25 Person.prototype.age; // endiselt 25
Või luua uusi välju:
john.nationality = "Estonian"; john.nationality; // tagastab: "Estonian" mary.nationality; // tagastab: undefined
JavaScripti kaasamiseks HTML-dokumenti kasutatakse