JavaScript-koodi koostuu lauseista. Yksinkertaisimpia näistä ovat sijoituslauseet ja funktioiden kutsut, joita voi usein käsitellä myös lausekkeina.
Yksinkertaisista lauseista muodostetaan ohjelmia rakenteisten lauseiden eli kontrollirakenteiden avulla.
Yksinkertaisin ehtolause on
if (ehto) {
lause
}
jossa lause suoritetaan, jos ehto on tosi (true). Hieman monipuolisempi versio on
if (ehto) {
lause1
} else {
lause2
}
jossa lause1 suoritetaan, jos ehto on tosi, mutta lause2 suoritetaan, jos ehto on epätosi (false). Esimerkiksi lause:
kirjoitetaan koodissa
<script type="text/javascript">
var aika = new Date();
var tunnit = aika.getHours();
if (tunnit < 12) {
document.write("<p>Nyt on aamupäivä!</p>");
} else {
document.write("<p>Nyt on iltapäivä!</p>");
}
</script>
Hieman monimutkaisempi ehdollinen kontrollirakenne on ns. valintalause
switch (lauseke) {
case arvo1:
lause1;
break;
case arvo2:
lause2;
break;
...
default:
oletuslause;
}
jossa lausekkeen tulosta verrataan arvoihin. Jos lausekkeen tulos on sama, kuin jokin arvoista arvoN suoritetaan vastaava(t) lause(et) lauseN. Jos mikään arvoista ei vastaa lausekkeen tulosta, suoritetaan oletuslause. Esimerkiksi toteamus
saadaan aikaan koodilla
<script type="text/javascript">
var aika = new Date();
var pv = "";
switch (aika.getDay()) {
case 1:
pv = "maanantai";
break;
case 2:
pv = "tiistai";
break;
case 3:
pv = "keskiviikko";
break;
case 4:
pv = "torstai";
break;
case 5:
pv = "perjantai";
break;
default:
pv = "viikonloppu";
}
document.write("<p>Nyt on " + pv + "!");
</script>
Toistolauseilla voidaan suorittaa samoja lauseita useita kertoja peräkkäin. Yleisimmät toistolauseet ovat for ja while.
for (alustus; ehto; jatko) {
lause;
}
while (ehto) {
lause;
}
Ensimmäisessä toistolause toimii niin, että aluksi suoritetaan alustus, sitten lausetta suoritetaan niin kauan kuin ehto on tosi. Aina lauseen suorituksen jälkeen suoritetaan myös jatko. Tätä toistolausetta käytetään usein taulukoiden läpikäynnissä. Yksinkertainen esimerkki tulostaa yhtä monta tähteä, kuin kellonajassa on sekunteja.
Tarvittava koodi on
<script type="text/javascript">
var aika = new Date();
var sek = aika.getSeconds();
document.write(sek + ": ");
for (i = 0; i < sek; i++) {
document.write("*");
}
</script>
Katsotaanpa mitä MIME-tyyppejä selaimesi tukee erillisellä sivulla. Lista MIME-tyypeistä tehdään seuraavalla merkkauksella ja koodilla:
<table border="1">
<tr><th>Tyyppi</th><th>Kuvaus</th><th>Tiedoston tyyppi</th></tr>
<script type="text/javascript">
var mt = navigator.mimeTypes;
var lukum = mt.length;
for (i = 0; i < lukum; i++) {
var mime = mt[i];
document.write("<tr><td>" + mime.type + "</td><td>"
+ mime.description + "</td><td>"
+ mime.suffixes.replace(/,/g, ", ") + "</td></tr>");
}
</script>
</table>
Toisessa toistolauseessa while suoritetaan lausetta toistuvasti niin kauan kuin ehto on tosi. Seuraavassa raivostuttavassa esimerkissä pyydetään käyttäjältä oikeanlaista syötettä:
Aloita klikkaamalla painiketta:
Tarvittava koodi on alla. Huomaa yhteys aiemmin esitettyy viikonpäiväesimerkkiin (muuttuja pv). Kuinka funktio saadaan suoritettua painiketta osoittamalla?
<script type="text/javascript">
function kysele() {
var vastaus = "";
while (vastaus == null || vastaus.toLowerCase() != pv) {
vastaus = window.prompt("Kirjoita viikonpäivä!", vastaus == null ? "" : vastaus);
}
}
</script>
Olioita ja luokkia käsitellään enemmän toisaalla. Tässä esitellään olioiden käsittelyssä tarvittavia lauseita. Toistolauseen variaatiolla
for (muuttuja in olio) {
lause;
}
suoritetaan lause kaikille olion ominaisuuksille, jotka tunnistetaan muuttujan avulla. Esimerkiksi koodin
<script type="text/javascript">
for (var i in window) {
var arvo = eval("window." + i);
document.write("window." + i + " = " + arvo + "<br />");
}
</script>
avulla saadaan selville kaikki selainikkunan ominaisuudet. Katso erillinen esimerkki.
Lauseella
with (olio) {
lause;
}
voidaan lyhentää koodia. Lause(i)ssa voidaan viitata suoraa olion sisälle ilman pistenotaatiota. Esimerkissä
var a, x, yvar r=10with (Math) {
a = PI * r * r
x = r * cos(PI)
y = r * sin(PI/2)}
PI on Math.PI, cos on Math.cos ja sin on Math.sin.
Jarkko Leponiemi 19.3.2002