JavaScript pagrindai
Atėjo laikas susipažinti su paslaptinguoju JavaScript… Kas gi tas JavaScript? O gi tai antra pagal populiarumą skriptinimo kalba tarp maniakų, anarchistų, nemokšų ir vaikų. Nors tokiai publikai labai patinka laisva kalbos sintaksė, neribota laivė ir neapibrėžtumas tai dar nereiškia, kad Jūs būtinai turite priklausyti šiai tamsiajai visuomenės pusei tam, kad galėtumėte mėgautis JavaScript kodo rašymu. Taip pat tai nereiškia, kad būtinai turite rašyti bjaurų, niekam nesuprantamą kodą, primenantį pirmokų pirmuosius bandymus užrašyti savo vardą. JavaScript Jums suteikia daug laisvės ir tik nuo Jūsų priklauso kaip Jūs ją panaudosite.
Apžvelgę pagrindines JavaScript funkcijas matome, kad tai tas pats ECMAScript, su keliais papildomais globaliais objektais, kuriuos visus galite patyrinėti JavaScript vadove.
JavaScript sintaksė šiek tiek panaši į Java bei C šeimos kalbų sintaksę, tačiau dėl automatinio kintamųjų tipo konvertavimo bei ne į klases, o į prototipus orientuoto objektinio medelio yra šiokių tokių skirtumų.
Javascript - tai Spárta
— Manėte, kad JavaScript neturi tipų? Manėte neteisingai, nes pagal ECMAScript specifikaciją yra net šeši duomenų tipai: Undefined, Null, Boolean, String, Number ir Object, o JavaScript jų turi net daugiau.
Tiesa, dėl automatinio konvertavimo Jums jų maišyti niekas nedraudžia, todėl galite parašyti "5.1" * 2 - true
ir gausite ‘number’ tipo reikšmę 9.2.
— Manėte, kad nauji objektai yra kuriami tik su operatoriumi ‘new’? Manėte neteisingai (iš dalies), nors galima ir taip, rekomenduojama naudoti { } objektams ir [ ] masyvams kurti. Žinoma, galutiniam rezultatui tai įtakos neturi, tačiau taip kodas bus skaitomesnis.
— Manėte, kad mėnesiai numeruojami nuo 1? Manėte neteisingai, nes JavaScript pasaulyje visi mėnesius numeruoja nuo 0 (kaip tikri programuotojai). Tačiau tam, kad būtų išlaikytas tinkamas entropijos lygis ir tam, kad neliktų nuskriausi Pascal programavimo kalbą mėgstantys programuotojai, dienos numeruojamos nuo 1. Atsiminkite new Date(2000, 0, 1) yra 2000-01-01, o new Date(2000, 1, 0) yra 2000-1-31. Šioje pastraipoje klaidų ir logikos prieštaravimų nėra.
— Manėte, kad tol, kol dar nesukurtas kvantinis kompiuteris jums užteks tik true ir false loginėms reikšmėms užrašyti? Manėte neteisingai, nes nors JavaScript neįneša trečiosios būsenos ‘gal’, čia neapsiribojama tik dviem išsireiškimais. Atsiminkite JavaScript - labai pozityvi kalba: NE čia reiškia tik ‘false’, ‘0’, ‘NaN’, ‘null’, ‘undefined’ ir tuščias stringas. Visos kitos reikšmės reiškia TAIP. Tam, kad būtų suvaldytas šis optimizmas, senieji išminčiai nusprendė pridėti papildomų operatorių: ‘===’, ‘!==’, ‘<==’ ir ‘>==’, kurie papildomai patikrina ar sąlygoje naudojami kintamieji yra tokio pačio tipo. Atrodo paprasta? O kvantinė fizika irgi yra paprasta? Ne viskas yra taip, kaip atrodo, todėl pamąstykite ką gražins kiekviena iš šių sąlygų:
'-0000000e-000000000' == false
({toString: function() {return ''}}) == false
[[[[0]]]] == false
Infinity == Infinity
Number.NaN == Number.NaN
'' == '0'
pirmaKartaPanaudotasGlobalusKintamasis == undefined
Sugalvojote atsakymus? Jeigu į pirmus keturis atsakėte true, į penktą ir šeštą false, o paskutiniam išmetėte exceptioną, galite save laikyti fiziku teoretiku. Jeigu ne, atsiminkite:
- Niekada netikrinkite ar globalus kintamasis buvo aprašytas naudodami sąlygą
if(gKintamasis){}
arbaif(gKintamasis != undefined){}
Vietoj to naudokiteif(typeof gKintamasis != 'undefined'){}
- Number.NaN nelygus niekam. Net ir pats sau. Vietoj palyginimo naudokite funkciją:
isNaN(value)
- Nors tai prieštarauja matematikai, Infinity yra lygus Infinity, tačiau -Infinity nelygus Infinity. Štai kodėl
1/0 != 1/-0
- Naudodami
if(kintamasis){}
pagalvoite ar tikrai norite, kad sąlygos netenkintų skaičius ‘0’ ar tuščia reikšmė ir ar nenorėtumėt savo sakinio pakeisti įif(kintamasis !== null){}
- Jeigu abiejose palyginimo operatoriaus pusėse kintamųjų tipai sutampa, naudojamas normalus palyginimas (nenaudojamas tipų konvertavimas), todėl ‘’ lyginant su ‘0’ nepavirsta į false, o lieka tuščia simbolių eilute.
— Manėte kad Jums (ne) reikia kabliataškių? Manėte teisingai! Tačiau visiškai nesvarbu ką manėte, vis tiek visada dėkit kabliataškius, nes parašę
|
|
nesuprasite, kad bandote 1 padalinti iš 2.
— Manėte kad jau viskas? Manėte neteisingai, nes neribota laisvė suteikia neribotų galimybių.
O čia — Namų darbai