Andrise programmeerimisalane WIKI
Globaalsed objektid
Globaalsed väärtused, funktsioonid ja objektid on defineeritud JavaScripti poolt ning on kättesaadavad läbi terve programmi, olles seega kasutatavast koodist sõltumatud. Globaalsed objektid kuuluvad reeglina window objekti juurde, olles window meetoditeks ja omadusteks, kuid nende kasutamisel võib eesliite window. koodi kirjutamisel ära jätta.
var d1 = new window.Date(); var d2 = new Date();
Mõlemad read teevad sama asja - luuakse uus ajaobjekt. Ühel juhul aga on ära märgitud, et Date pärineb window objektist, teisel juhul on see ära jäetud.
Lisaks JavaScripti poolt defineerituile kuuluvad ka kõik kasutaja loodud globaalsed objektid (näiteks muutujad, mis pole defineeritud märksõnaga var) tegelikult window objektai juurde. Seda teades on võimalik ühes koodis kasutada nii lokaalset kui ka globaalset sama nimega muutujat.
a = 1; (function z(){ var a = 2; alert(a); // 2 alert(window.a); // 1 })()
Globaalsed väärtused
Globaalsed väärtused on mitmed eritüübilised väärtused, mida teistmoodi pole võimalik kirja panna (näiteks lõpmatuse väärtus Infinity või mitte-number NaN). Antud väärtused on defineeritud kui window objekti omadused.
Infinity
Infinity tähistab lõpmatust. Tagastatakse näiteks nulliga jagamisel. Võib olla nii positiivne, kui negatiivne. Käitub matemaatilise lõpmatusena - iga tehe, kus numbrile liidetakse või numbrit korrutatakse lõpmatusega, tagastab lõpmatuse. Lõpmatusega jagamine annab väärtuseks nulli.
NaN
Numbri eritüüp mitte-number NaN ei ole kunagi võrdne ühegi numbriga, sealhulgas iseendaga. NaN tuvastamiseks tuleb kasutada funktsiooni isNaN. Väärtuse NaN tagastab näiteks jagamistehe, mille üheks operandiks on mittenumbriline tekst.
NaN == NaN; // false isNaN(NaN); // true
undefined
undefined on muutujate esialgseks väärtuseks juhul kui muutuja lähtestamisel jääb väärtus seadmata. Samuti tagastab selle väärtuse funktsioon, millel on tagastusväärtus seadmata.
var i; //undefined function a(){} a(); // undefined
Kuna undefined on tegelikult globaalse objekti (brauserites on selleks window) omaduseks, on sisuliselt tegemist muutujaga. Omaduse undefined väärtus on programmi alguses primitiivtüüp undefined, kuid programmi täitmise käigus on seda väärtust vajadusel võimalik muuta.
Tehetes on undefined loogikaväärtusena võrdne väärtusega false, numbrina NaN ning stringina "undefined".
Globaalsed funktsioonid
Globaalsed funktsioonid on erinevad window objekti meetodid, mis on peamiselt mõeldud erinevate abistavate toimingute läbiviimiseks. Näiteks encodeURIComponent stringide teisendamiseks HTTP päringute sooritamisel või isNaN kontrollimaks numbri kehtivust.
endoceURI
String encodeURI(String URI)
encodeURI teisendab ressursiidentifikaatori (URI) teksti, asendades osad märgid (erisümbolid) ühe, kahe või kolme paojadaga, mis tähistavad vastava märgi UTF-8 kodeeringukoodi.
Asendatakse kõik märgid, mis ei kuulu järgmiste hulka
ladina tähed (a-z), numbrid, ";" , "," , "/", "?", ":", "@", "&", "=", "+", "$", "-", "_", ".", "!", "~", "*", "'", "(", ")"
encodeURI('http://www.neti.ee/cgi-bin/webnews?t=õäöü'); // "http://www.neti.ee/cgi-bin/webnews?t=%C3%B5%C3%A4%C3%B6%C3%BC" // %C3 + %B5 = õ. // %C3 on paojada, kus paomärgiks on % ning jada sisuks 16 süsteemis // number 00..FF, tähistades sellega mingit kindlat baiti. // %C3 + %A4 = ä // %C3 + %B6 = ö // %C3 + %BC = ü
Kuna asendusel eeldatakse, et parameetriks on täielik URI ning jäetakse vahele sümbolid nagu ?, & ja =, ei saa seda funktsiooni kasutada näiteks AJAXi päringus saadetavate parameetrite kodeerimiseks. Selle jaoks tasub vaadata funktsiooni encodeURIComponent.
decodeURI
String decodeURI(String URI)
decodeURI on funktsiooni encodeURI pöördfunktsioon. Teisendatud paojadad asendatakse tekstis originaalsete sümbolitega.
encodeURIComponent
String encodeURIComponent(String URIComponent)
encodeURIComponent teisendab ressursiidentifikaatori (URI) komponendi, asendades osad märgid (erisümbolid) ühe, kahe või kolme paojadaga, mis tähistavad vastava märgi UTF-8 kodeeringukoodi.
Kui encodeURI on mõeldud terve URI teisendamiseks, siis encodeURIComponent ootab sisendiks ainul URI komponenti (mõne parameetri väärtust), kaasates teisenduseks sümbolid ?, & ja = ja tehes sellega antud funktsiooni funktsioonist encodeURI tunduvalt kasulikumaks. Nimelt saab seda funktsiooni kasutada näiteks AJAX-i päringutes POST ja GET parameetrite kodeerimiseks.
encodeURI kasutamise korral peame olema kindlad sisendi väärtuse suhtes - tavaliselt aga tahame ju edastada hoopis mingit muutuvat informatsiooni. Näiteks kasutaja kirjutab lahtrisse soovitud teksti ning meie saadame selle AJAX'i päringuga serverile. Kõik on korras kui tekstis pole eelpoolmärgituid sümboleid - juhul kui aga on, tekitab see encodeURI korral kiiresti probleemi.
Nimelt on need sümbolid mõeldud väärtuste esitamiseks võtme-väärtuse paaridena tekstikujul url?param1=value1¶m2=value2 ning ootamatute sümbolite esinemised võivad selle masinloetava teksti ära rikkuda. Paremal juhul saab server kätte teksti, kust puuduvad osad tähed, halvemal juhul aga kirjutatakse üle mõni oluline parameeter. Kuna encodeURIComponent teisendab aga kõik vajalikud sümbolid vastavate paojadadega, siis sellisel juhul vastavat probleemi ei teki.
var ajax_post_body = 'param=' + encodeURIComponent('Siin on mõned erisümbolid, &?=.'); // param=Siin%20on%20m%C3%B5ned%20eris%C3%BCmbolid%2C%20%26%3F%3D
decodeURIComponent
String decodeURIComponent(String URIComponent)
decodeURIComponent on funktsiooni encodeURIComponent pöördfunktsioon. Teisendatud paojadad asendatakse tekstis originaalsete sümbolitega.
eval
mixed eval(String javascript)
eval käivitab stringi kujul saadud parameetri kui JavaScripti koodi.
eval("alert(1)"); // avaneb teateaken sisuga "1"
Võimaluse korral ära kasuta seda funktsiooni. Funktsiooniga eval kaasneb kaks olulist probleemi. Esiteks käivitub eval funktsioonile antud tekst ühena koodi osast, samas aga kui kuskil peaks tekkima mingi viga, on põhjust raske leida. Vea kohta antav info - näiteks rea number, kus viga tekkis - ei pruugi meile öelda mitte midagi, kuna sellist rida pole reaalselt olemas, see luuakse programmi sisse jooksvalt eval käsu käivitudes.
Teiseks on probleeme turvalisusega. Kui funktsioon käivitab skriptina teksti, mis kasutab ebausaldusväärset allikat (näiteks brauseri veebiaadressi riba), võib programm kergesti häkkerite saagiks langeda. Loe lähemalt turvalisuse peatükist.
isFinite
Boolean isFinite(mixed number)
Kontrollib, kas parameetrina lisatud väärtus on lõplik number. Juhul kui parameetri väärtuseks on NaN, Infinity või -Infinity on tagastusväärtuseks false, vastasel korral true.
isFinite(23); // true isFinite(Infinity); //false
isNaN
Boolean isNaN(mixed väärtus)
Kontrollib kas parameetrina lisatud väärtus pole number. Numbrina arvestakse ka stringe mida saab konverteerida numbriks („123“).
isNaN("abc"); //true isNaN(23); // false
parseFloat
Number parseFloat(mixed väärtus)
Arvutuste tegemine muutujatega osutub üsna keeruliseks, kui mõni sisendväärtus on tekstikujuline - näiteks pärineb HTML lehel olevast tekstiväljast. Nimelt muudetakse liitmisel mõlemad operandid tekstiks, kui üks seda juba on. Arvude liitmisel me sellist käitumist siiski ei soovi (3 + „3“ == „33“) ning seega oleks vaja tekstikujuline number kõigepealt „päris“ numbriks saada. vastava tegvuse jaoks saabki kasutada funktsiooni parseFLoat.
parseFloat teisendab teksti ujukoma numbriks. Funktsioon töötleb teksti sümboli kaupa vasakult paremale ning töötab seni, kuni saabub teksti lõpp või ilmneb sümbol, mis ei ole +, -, 0-9, komakoha eraldaja . või eksponent E. Lubatud on eelnevad ja järgnevad tühikud.
parseFloat("33"); // 33
parseInt
Number parseInt(mixed väärtus [, Number radix = 10])
parseInt teisendab teksti täisarvuks (ei ümarda). Erinevusena funktisoonist parseFloat omab funktsioon parseInt täiendavat valikulist sisendparameetrit radix, mis tähistab teisendatava numbri järgu alust. Juhul kui nimetatud parameeter on määramata, kasutab skript 0x algusega teksti puhul järgu alusena kuueteistkümnendsüsteemi, 0 puhul oktaalsüsteemi. Vaikimisi on järgu aluseks kümnendsüsteem.
parseInt("10") // 10, kümnendsüsteem parseInt("010"); // 8, oktaalsüsteem parseInt("0x10"); // 16, kuueteistkümnendsüsteem
Globaalsed objektid
Globaalsed objektid on peamiselt erinevad konstruktorid, mis võimaldavad luua erinevaid - näiteks String või Error tüüpi - objekte.
Array
Array new Array(mixed parameetrid)
Array objekt võimaldab luua massiive. Täpsemalt saab nende kohta lugeda Massiivide peatükist.
Massiiviobjekti saab deklareerida järgnevalt:
var massiiv = new Array([parameetrid]);
Kui massiiviobjekti loomisel pole parameetreid määratud, luuakse tühi massiiv. Juhul kui massiiviobjekti parameetriks on ainult üks number, käsitletakse seda massiivi suurusena ning luuakse massiviobjekti parameetri väärtuse suurune hulk undefined väärtusega massiivielemente. Kui aga parameeter ei ole number või parameetreid on mitu, saavad massiivi elementide väärtusteks parameetrite väärtused.
var massiiv1 = Array(); // [] var massiiv2 = new Array(2); // [undefined, undefined] var massiiv3 = new Array(1,2,3); // [1,2,3]
Massiivi indeksiteks saavad olla vaid numbrid. Proovides lisada massiivile väärtust stringikujulise indeksiga, lisatakse väärtus massiivile objekti omadusena.
Boolean
Boolean new Boolean(Boolean väärtus)
Boolean objekt on loogikaväärtuse koostamiseks. See on siiski suhteliselt harva kasutatav vorm, kuna new Boolean(väärtus) meetodil loodud väärtus true või false ei ole ühilduvad primitiivsete väärtustega true ja false. Näiteks tingimuslause if(new Boolean(false)){} on oodatust vastupidiselt tõene ning {..} blokis olevad laused lähevad täitmisele. See tuleneb faktist, et primitiivne false ootab väärtuse mitte-olemist. new Boolean konstruktoriga loodud objektil on aga väärtus olemas, isegi kui selleks väärtuseks on false.
Date
Date new Date(mixed parameetrid)
Date võimaldab luua objekte, mille väärtuseks on erinevad ajad (vaikimisi hetkeaeg). Objekti deklareerimise süntaks on järgmine:
var aeg = new Date([parameeter]);
kus parameeter võib olla
- seadmata. Sellisel juhul on konstruktori tagastatava objekti väärtuseks hetke aeg.
- millisekundid alates esimesest jaanuarist, 1970 (UTC)
- tekstikujuline aeg (RFC 822 standardi järgi)
- komadega eraldatult numbritega
aasta, kuu, päev [, tund, minut, sekund, millisekund]
Erinevate kuupäevadega objektide loomine võimaldab näiteks arvutada kahe kuupäeva vahelist aega.
var aeg1 = new Date(); // Tänane päev var aeg2 = new Date(2000,1,1); // Esimene jaanuar, 2000 var vahe = aeg1.getTime() - aeg2.getTime(); // ajavahe millisekundites var paevi = Math.floor(vahe/(1000*3600*24)); // ajavahe päevades alert('Esimesest jaanuarist 2000 on möödas '+paevi+' päeva');
Lähemalt saab Date objekti kohta lugeda kuupäevade peatükist.
Error
Error new Error([String teade [,String failiNimi [,Number reaNumber]])
Konstruktor Error võimaldab koostada objekte veainfoga, mida saab kasutada koos käsuga throw.
var a; try{ if(a === undefined){ throw new Error("Viga! Muutuja a väärtus on seadmata"); } }catch(E){ alert(E.message); }
EvalError
EvalError objekt väljastatakse, kui käskluse eval väljakutsumine pole korrektne. Näiteks võib (aga ei pea, oleneb brauserist) viga tekkida, kui funktsioon eval omistatakse mõnele muutujale.
var minuEval = eval; // võib tekkida EvalError veaobjekt
Function
Function new Function([mixed param1[, mixed param2[…,mixed paramN]]], String funktsiooniSisu)
Iga funktsioon JavaScriptis on tegelikult konstruktori Function objekt. Funktsiooni objekti konstruktoriga Function saab defineerida järgnevalt:
var funktsioon = new Function([param1[, param2[...,paramN]]], funktsiooniSisu);
Näiteks
var funktsioon = new Function('number','alert(number)'); funktsioon(123); //123
Funktsioonide, sh. funktsiooniobjekti kohta on pikemalt juttu funktsioonide peatükis.
Math
Math on JavaScriptis globaalne objekt, mis sisaldab mitmesuguseid staatilisi meetodeid ja omadusi matemaatiliste operatsioonide läbiviimiseks. Erinevalt teistest globaalsetest objektidest, ei kasutata Math objekti konstruktorina.
Täpsemalt saab Math objekti kohta lugeda matemaatika peatükist.
Number
Number new Number(Number number)
Numbriobjekt koostab primitiivse numbritüübi ümber objekti, mis võimaldab numbritele rakendada mitmeid meetodeid ning omadusi.
Loe numbriobjektist lähemalt numbrite peatükist.
Object
Object new Object()
Globaalne objekt Object on uute objektide koostamiseks. Alternatiivne variant, oleks objekti defineerimisel kasutada Object konstruktori asemel objektiliteraale {}.
var objekt = new Object(); var objekt2 = {};
Loe objektide kohta lähemalt objektide peatükist.
RangeError
RangeError objekt väljastatakse, kui number ei mahu etteantud piiridesse. Näiteks tagastab sellise vea järgmine konstruktsioon:
new Array(4294967296);
Näites üritame luua massiivi, mille elementide arvuks on 4294967296, kui maksimaalselt lubatud piiriks 4294967295.
ReferenceError
ReferenceError objekt väljastatakse, kui üritatakse opereerida defineerimata muutujaga.
alert(r); // muutuja r on defineerimata
RegExp
RegExp new RegExp(String regulaaravaldis, String lipud)
RegExp võimaldab defineerida regulaaravaldist. Alternatiivina saab kasutada ka regulaaravaldise literaale //.
var re = new RegExp("[0-9]+","g"); var re2 = /[0-9]+/g;
Lähemalt saab regulaaravaldistest lugeda regulaaravaldiste peatükist.
String
String new String(String string)
String objekt ümbritseb stringiprimitiive, võimaldades stringidele rakendada erinevaid meetodeid ja omadusi.
Loe lähemalt stringiobjektide kohta stringide peatükist.
SyntaxError
SyntaxError objekt väljastatakse, kui programmikoodis on süntaksiviga.
var r = [} // süntaksiviga
TypeError
TypeError objekt väljastatakse, kui mingi vajalik väärtus ei ole oodatud tüüpi.
function a(number){ if(typeof number != 'number'){ throw new TypeError("Parameeter ei ole number!"); } } a("test"); // tüübiviga, "test" ei ole number
URIError
Veaobjekt URIError väljastatakse vigase URI puhul, näiteks funktsioonidega decodeURI ja decodeURIComponent, kui parameetrina edastatud string on vigane.
decodeURI("%x2345"); // string on vigane
Käidud rada: • matemaatika • sissejuhatus • funktsioonid • andmetueuebid • xmlhttprequest • aeg_ja_kuupaev • bitioperatsioonid • regulaaravaldised • keele_struktuurid • globaalsed_objektid