Mine sisu juurde

JavaScript

Allikas: Vikipeedia
Redaktsioon seisuga 10. juuni 2013, kell 21:41 kasutajalt Kyng (arutelu | kaastöö)
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 1.8.5 (22. märts 2011)
Tüüpimine dünaamiline, nõrk, pardi
Mõjutatud keeltest Self, C, Scheme, Perl, Python, Java
Mõjutanud keeli Objective-J, JScript, JScript .NET

JavaScript on Netscape'i poolt loodud objektorienteeritud programmeerimiskeel, mida kasutatakse peamiselt veebilehtede skriptimiseks. JavaScript on ülemhulk ECMAScripti standardi poolt defineeritud keelest.[1]

Hoolimata nimest pole JavaScriptil kuigi palju ühist Javaga. Mõlemad keeled jagavad küll C-st pärit süntaksit ning on objektorienteeritud, kuid nende erinevused on suuremad kui sarnasused.[2][3]

Ajalugu

JavaScript on loodud Brendan Eichi poolt Netscape'is. Algselt kandis keel nimetust Mocha, siis LiveScript ning lõpuks JavaScript.[4] Esimene JavaScripti toega veebilehitseja oli 1995 septembris välja lastud Netscape Navigator 2.0 (siis veel LiveScript).[5] 1996 augustis lisas Microsoft JavaScriptiga ühilduva keele JScript veebilehitsejasse Internet Explorer 3.0.

JavaScript standardiseeriti Ecma International poolt 1997. aasta juunikuus nime ECMAScript all.[6] 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.

Ülevaade

JavaScripti peetakse väga paljude poolt ülilihtsaks keeleks, mille abil saab lehele väikeseid efekte lisada. Vastupidiselt üldlevinud arvamusele pakub JavaScript väga laialdasi võimalusi väheste kuid võimsate keelevahenditega.[3]

  • Keel on läbivalt objektorienteeritud: peaaegu kõik andmetüübid (numbrid, stringid, massiivid, funktsioonid) on objektid.
  • Keeles on vaid üks numbriline andmetüüp: 64 bitine ujukomaarv. Täisarvutüüp puudub.[7]
  • Puuduvad klassid, objektide konstrueerimine ja ka pärilikkus toimub prototüüpide põhjal kasutades konstruktorfunktsioone.[8]
  • Objektid on lihtsad nimi-väärtus paaride kogud nagu Perli ja Ruby paisktabelid või Pythoni sõnaraamatud.[9]
  • Toetatud on kõrgemat järku funktsioonid ja sulundid.
  • Puudub sisendi ja väljundi kontseptsioon, sest skriptimiskeelena on mõeldud jooksma teiste programmide sees.[9]

Kõige laialdasemalt kasutatakse JavaScripti veebilehtedel. Seda peetakse koguni maailma populaarseimaks programmeerimiskeeleks.[10] Kuid brauserid pole JavaScripti ainuke keskkond.

Väljaspool veebi kasutavad JavaScripti näiteks Adobe Reader (JavaScript PDF failides) ja Adobe Photoshop. Arendamisel on OpenOffice.org makrode kirjutamise võimalus JavaScriptiga. Iga rakendus pakub enda sisseehitatud objekte, mille abil saab operatsioone teostada (brauserites on selleks objektiks window).

Süntaks

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 ning try-catch konstruktsioonid erindite viskamiseks ja püüdmiseks.

Hello world

Hello world programm mis avab dialoogiakna:

alert("Hello world");

Alternatiivne variant, mis kirjutab teksti otse veebilehele:

document.write("Hello world");

Objektid ja massiivid

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 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) andmevahetusformaat,[11] mida kasutatakse ohtralt koos Ajax-iga.

Funktsioonid

Funktsioone luuakse funktsiooniliteraali abil:

function factorial(n) {
    if (n > 1) {
        return n * factorial(n-1);
    } else {
        return 1;
    }
}

Funktsioonile saab anda nime, nagu eelnevalt tehtud, kuid saab kasutada ka anonüümseid funktsioone. Viimaseid on hea anda parameetritena kõrgemat järku funktsioonidele. Näiteks järgnev kood sorteerib 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 lokaalsete muutujate globaalsesse nimeruumi sattumise vältimine. Selleks mähitakse kogu kood ühe suure anonüümse funktsiooni sisse, mis koheselt käivitatakse:

(function(){
    ...kogu kood siia...
})();

Konstruktorfunktsioonid ja prototüübid

Loomaks mitmeid sarnaste omadustega objekte 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

Siiamaani näeb kõik välja nagu klassipõhises objekt-orienteeritud programmeerimises. Kuid Person pole siiski klass, vaid hoopis dünaamilisem kooslus. Näiteks võime Person-i 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 lausa uusi välju luua:

john.nationality = "Estonian";
john.nationality; // tagastab: "Estonian"
mary.nationality; // tagastab: undefined

Kaasamine veebilehele

JavaScripti kaasamiseks HTML dokumenti kasutatakse <script> elementi:

<script type="text/javascript">
  document.write('Terekest!');
</script>

Alternatiivne variant on linkida <script> elemendi abil eraldi JavaScripti faili:

<script type="text/javascript" src="script.js"></script>

Enamasti kaasatakse JavaScript lehele tavalise lähtekoodi kujul. Suuremate failide korral kasutatakse minimiseerimist, et vähendada allalaetavat andmehulka ja kiirendada seeläbi lehekülje laadimist.[12]

Mitte kõik brauserid ei toeta JavaScripti ning ka nendel mis toetavad, saab selle välja lülitada. Kuna pole garanteeritud, et leheküljel olev JavaScript lehe avanedes käivitub, siis saab kasutada JavaScripti nõnda, et see üksnes täiendab ilma JavaScriptitagi toimivat lehekülge.[13]

Turvalisus

Sageli lülitavad kasutajad brauseril JavaScripti toe välja. Seda tehakse peamiselt turvalisuse pärast. Veebilehitseja lubab skriptile küll õige vähe. Muuhulgas keelab ta kohalikule kettale ligipääsu, väliste koodide käivitamise, ligipääsu dokumentidele, mis ei asu samas serveris, ligipääsu külastatud lehtede nimekirjale (selle hoolimata lubab eelnevalt külastatud lehtedele tagasi suunata), kõvakettalt faili üleslaadimist kui kasutaja ise ei ole failinime ette ütelnud, sulgeda akent, mis ei ole avatud javascripti poolt (selleks küsitakse kasutajalt luba).

Silumine

Arendamisel tekivad tavaliselt raskused erinevate lehitsejate toega. Tihti ei puuduta see keeleomadusi vaid väljendub erinevate objektide omaduste ja funktsioonide näol. Programmeerimise hõlbustamiseks on välja töötatud mitmeid silumisvahendeid:

Viited

  1. "About JavaScript" MDC, 4. aprill 2010
  2. Peter-Paul Koch: "JavaScript vs. Java" 4. aprill 2010
  3. 3,0 3,1 Douglas Crockford: "JavaScript: The World's Most Misunderstood Programming Language" 4. aprill 2010
  4. JavaScript History & Information, XMLuk.org
  5. The History of JavaScript
  6. ECMA-262 Edition 1 (PDF)
  7. Douglas Crockford: "A Survey of the JavaScript Programming Language" 4. aprill 2010
  8. Douglas Crockford: "Prototypal Inheritance in JavaScript" 4. aprill 2010
  9. 9,0 9,1 A re-introduction to JavaScript MDC
  10. Douglas Crockford (5. aprill, 2010). "JavaScript: The World's Most Misunderstood Programming Language Has Become the World's Most Popular Programming Language". {{netiviide}}: kontrolli kuupäeva väärtust: |Aeg= (juhend)
  11. www.json.org
  12. Google Page Speed Performance Best Practices: Minify JavaScript
  13. Unobtrusive JavaScript
  14. Venkman JavaScript Debugger project
  15. Script Debugger for Windows NT 4.0 and Later
  16. Internet Explorer Developer Toolbar
  17. Opera Dragonfly
  18. Introducing Dosera – Surfin' Safari
  19. Developer Tools for Google Chrome

Välislingid