V kódu JavaScriptu se příkaz skládá z jedné nebo několika položek a symbolů na řádku. Příkazy jsou obvykle ukončeny středníkem. V praxi, pokud píšete každý příkaz na zvláštní řádek, můžete středník vynechat. Je však žádoucí si zvyknout používat středník k ukončení zápisu příkazu vždy. Příklad zápisu příkazů:
Jmeno = "Petr";
var dnes = new Date();
Skupina příkazů JavaScriptu ohraničená složenými závorkami se nazývá blok nebo také složený příkaz. Bloky příkazů se používají například ve funkcích a podmínkách. V následujícím příkladu začíná první příkaz definici funkce, která se skládá z bloku pěti příkazů. Poslední tři příkazy, které nejsou ohraničeny složenými závorkami, nejsou v bloku a nejsou součástí definice funkce.
function Konvertuj (palcu) {
// následujích 5 příkazů tvoří blok
stopa = palcu / 12;
mil = stopa / 5280;
namornich_mil = stopa / 6080;
cm = palcu * 2.54;
metru = palcu * 39.37
;
}
// následující 3 příkazy nejsou částí bloku
km = metru / 1000;
kradius = km;
mradius = mil;
S funkcí (doplněnou o příkazy výstupu) můžete experimentovat − viz ukázka .
JavaScript podporuje podmíněný příkaz ve tvaru if a if…else. V příkazu if se testuje podmínka a pokud je splněna provede se kód za if. V příkazu if…else je navíc vykonán kód za else pokud je výsledkem testu podmínky hodnota false. Nejjednodušší podoba příkazu může být napsána na jedné řádce, nicméně daleko více se budete setkávat s víceřádkovou formou. Dalším podmíněným příkazem je příkaz switch. K rozvětvení programu lze použít i podmínkový operátor.
Podmíněně vykoná skupinu příkazů v závislosti na hodnotě podmínky.
Syntaxe:
if (podmínka)
příkaz1
[else
příkaz2];
Syntaxe příkazů if, if…else má tyto části:
Část | Popis |
podmínka | Logický výraz. Pokud je podmínka null nebo undefined, je vyhodnocena jako false. |
příkaz1 | Příkaz k vykonání pokud je podmínka vyhodnocena jako true. Může se jednat také o složený příkaz. |
příkaz2 | Příkaz k vykonání pokud je podmínka vyhodnocena jako false. Může se jednat také o složený příkaz. |
Pro přehlednost a vyloučení nechtěných chyb je dobrým zvykem uzavírat příkaz1 a příkaz2 do složených závorek. V následujícím příkladu by se mohlo zdát, že else patří k prvnímu if, ale ve skutečnosti patří k tomu druhému:
if (x == 5)
if (y == 6)
z = 17;
else
z = 20;
Úpravou kódu do následující podoby vyloučíme všechny mnohoznačnosti - viz také ukázka .
if (x == 5)
{
if (y == 6)
z = 17;
}
else
z = 20;
Podobně, pokud budete chtít přidat příkaz do Příkaz1 a nepoužijete složenou závorku, nastane chyba:
if (x == 5)
z = 7;
q = 42;
else
z = 19;
V tomto příkladu je chyba v syntaxi, tj. je více než jeden příkaz mezi if a else. Pro správný běh programu je nutností doplnění složených závorek okolo příkazů, které jsou mezi if a else.
Následující příklady jsou demonstrací příkazu if…else. První z nich ukazuje nejjednodušší druh testu. Pokud má proměnná nova_lod hodnotu true, provede se kód následující po if:
// Funkce Rozbij() je definována už někde dříve
// v programu
if (nova_lod)
Rozbij(lahevSampanskeho);
// Test proměnné nova_lod
V následujícím příkladu se příkaz odpoved = "Je to slon"; provede pouze v případě, že jsou splněny obě podmínky. V ukázce je použit objekt (podrobněji viz studijní článek Objekty v JavaScriptu).
if (zvire.usi == "velke" && zvire.nohy == 4)
{
odpoved = "Je to slon"; }
Následující příklad ilustruje situaci, kdy je proveden příkaz modra_knizka = true; v případě, že je splněna alespoň jedna z podmínek vyska < 150 a hmotnost > 200. Pokud není splněna žádná z podmínek, provede se příkaz modra_knizka = false - viz ukázka .
// test bude true pokud platí alespoň jedna
// podmínka
var modra_knizka;
if ((vyska < 150) || (hmotnost > 200))
{
modra_knizka = true;
}
else
modra_knizka = false;
Pokud máte několik podmínek ke společnému otestování a víte, že jedna má vyšší pravděpodobnost kladného či záporného výsledku (to závisí na použitém operátoru, tj. || nebo &&), můžete urychlit běh programu umístěním této podmínky na začátek podmíněného příkazu. Například jestliže musí být splněny všechny tři podmínky (spojené operátorem &&) a druhá podmínka nebude splněna, třetí se vůbec vyhodnocovat nebude. Podobně v případě, kdy stačí jediná kladně vyhodnocená podmínka z několika (při použití operátoru ||), skončí vyhodnocování, jakmile jedna z podmínek bude splněna.
Podmínkový operátor je jediným operátorem se třemi operandy (ternární operátor). První operand podmínkového operátoru musí mít logickou hodnotu (obvykle výsledek porovnání). Druhý a třetí operand mohou mít jakoukoli hodnotu. Hodnota vrácená podmínkovým operátorem závisí na logické hodnotě prvního operandu. Pokud je true, pak je hodnota podmínkového operandu rovna hodnotě druhého operandu. Pokud je false, pak je hodnota rovna hodnotě třetího operandu. K zápisu podmínkového operátoru používáme znak otazník, který píšeme za výraz, jehož hodnotu testujeme (narozdíl od if, které se píše před výraz), následují druhý a třetí operand, které jsou odděleny dvojtečkou. Situace je ilustrována příkladem viz ukázka . Při změně hodnot hodina a jmeno se změní i výstupní hodnoty programu.
var denni_doba = " ";
// následující podmínkový operátor určí denní
// dobu, je použita proměnná hodina,
// která již byla dříve definována
denní_doba += ( hodina >= 12) ? "odpol" : "dopol";
Následující zápis :
Pozdrav="ahoj"+((jmeno!=null) ? jmeno : "kamaráde"
je ekvivalentní s
Pozdrav = "ahoj";
if (jmeno != null)
Pozdrav += jmeno
else
Pozdrav += "kamaráde"
Přepne na příkaz či skupinu příkazů, jejichž návěští odpovídá hodnotě výrazu.
Syntaxe:
switch (výraz) {
case návěští:
seznam příkazů
case návěští:
seznam příkazů
...
default:
seznam příkazů
}
Příkaz switch má následující části:
Část | Popis |
výraz | Logický výraz. |
návěští | Pokud je návěští rovno aktuální hodnotě výrazu, vykonávání pokračuje se seznamem příkazů bezprostředně za dvojtečkou a pokračuje, dokud nenarazí na příkaz break, který je volitelný nebo na konec příkazu switch. |
seznam příkazů | Jeden nebo několik příkazů k vykonání. |
Použijte speciální návěští default pro vykonání příkazu v případě, kdy žádné návěští neodpovídá hodnotě výrazu. Může být umístěno kdekoliv v kódu příkazu switch.
Lze používat bloky bez návěští či násobným návěštím. Jestliže žádné návěští neodpovídá hodnotě výrazu a není definováno ani návěští default, nevykoná se žádný příkaz.
Vykonávání příkazu switch probíhá podle následujících pravidel:
Následující příklad ukazuje test typu objektu příkazem switch:
function MujObjekt() {
...}
switch (objekt.konstruktor){
case Date:
...
case Number:
...
case String:
...
case MujObjekt:
...
default:
...
}
JavaScript podporuje následující druhy cyklů: for, for…in, while a do…while.
Používá se k opakovanému provádění příkazu, přičemž počet opakování je předem stanoven.
Syntaxe:
for (inicializace; test; krok)
příkaz;
Syntaxe příkazu for má tyto části:
Část | Popis |
inicializace | Inicializace řídící proměnné se provede pouze jednou a to před začátkem provádění cyklu. |
test | Logický výraz. Pokud je vyhodnocen jako true, je vykonán příkaz. Pokud je vyhodnocen jako false, cyklus je ukončen. |
krok | Změna hodnoty řídící proměnné cyklu je provedena na konci každého průchodu cyklem. |
příkaz | Příkaz k provedení pokud je podmínka test splněna. Samozřejmě se může jednat i o složený příkaz. |
Ilustrace použití příkazu cyklu for viz ukázka .
/* i je nastaveno na počátku na 0 a je postupně zvětšováno na konci každého průchodu o 1. Cyklus se ukončí v okamžiku, kdy i nebude menší než 10 před dalším průchodem cyklu */
for (i = 0; i < 10; i++)
{
j *= i; // zkratka pro j = j * i
}
Před každým průběhem cyklu je testována podmínka. Po průběhu cyklu je ještě před dalším průběhem aktualizována řídící proměnná cyklu. Pokud není podmínka nikdy splněna, cyklus není vykonán ani jednou. Pokud je podmínka splněna vždy, dojde k nekonečnému cyklu. Proto pište podmínky cyklů pečlivě.
/*
Změna řídící proměnné cyklu ("i++" v následujících případech) je vykonána na konci cyklu, po vykonání bloku příkazů těla cyklu a před testováním podmínky.
*/
var Kolikrat = 11; // Nastavuje limit 11 průběhů.
var sum = new Pole(Kolikrat);
/* Vytváří pole nazvané sum o 11 členech, od 0 do 10. */
var celkSum = 0;
sum[0] = 0;
for(var i = 1; i < Kolikrat; i++)
{ // Počítá od 1 do 10.
celkSum += i;
sum[i] = celkSum;
}
var sum = 0;
for(var i = 1; i > 0; i++)
{ // Toto je nekonečný cyklus.
sum += i;
}
Provede příkaz pro každou vlastnost objektu nebo složky pole. Objekty a pole jsou podrobněji popsány dále.
Syntaxe:
for (proměnná in [objekt | pole])
příkaz;
Syntaxe příkazu for…in má tyto části:
Část | Popis |
proměnná | Řídící proměnná cyklu, která může obsahovat libovolnou vlastnost objektu. |
objekt, pole | Objekt nebo pole, kterým „proběhne“ cyklus. |
příkaz | Příkaz, který má být vykonán pro každou vlastnost objektu nebo složky pole. Může být též složený příkaz. |
Před každým průběhem cyklu je proměnné přiřazena další vlastnost objektu. Můžete ji potom použít v libovolné části příkazu uvnitř cyklu přesně tak, jako byste používali vlastnost objektu. Když proběhne cyklus celým objektem, neexistuje žádná možnost jak zjistit či kontrolovat pořadí, ve kterém byly jednotlivé vlastnosti objektu přiřazeny do proměnné.
Vykonává příkaz, dokud je splněna podmínka (tj. není vyhodnocena jako false).
Syntaxe:
while (výraz)
příkaz;
Syntaxe příkazu while má následující části:
Část | Popis |
výraz | Podmínka (logický výraz) kontrolovaná před každým průběhem cyklu. Pokud je podmínka splněna, cyklus je vykonán. Pokud podmínka splněna není, cyklus je přerušen a pokračuje se dalšími příkazy za cyklem. |
příkaz | Příkaz k provedení v případě splnění podmínky. Samozřejmě se může jednat o složený příkaz. |
Cyklus while testuje Výraz před prvním průběhem cyklu. Pokud je v tomto okamžiku výraz vyhodnocen jako false, cyklus nikdy neproběhne viz ukázka .
Vykoná blok příkazů jednou a po té opakuje blok příkazů do té doby, než je podmínka vyhodnocena jako false).
Syntaxe:
do
příkaz
while (výraz)
Syntaxe příkazu do_while má následující části:
Část | Popis |
příkaz | Příkaz k vykonání při kladně vyhodnoceném podmínce. Může se samozřejmě jednat i o složený příkaz. |
výraz | Podmínka (logický výraz), kterou lze vyhodnotit jako true nebo false. Pokud výraz nabývá hodnoty true, proběhne cyklus znovu. Pokud výraz nabývá hodnoty false, průběh cyklu se ukončí. |
Hodnota výrazu není testována před prvním průběhem cyklu, což znamená, že cyklus proběhne vždy alespoň jednou. Poté je hodnota výrazu testována vždy po následujícím průběhu cyklu.
Rozdíl mezi cykly while, do…while a cyklem for je v absenci řídící proměnné cyklu. Používá se tehdy, když chcete provádět určitou akci tak dlouho, dokud je splněna nějaká podmínka.
var stav = "";
var pocitadlo = 42; // Inicializace odpočítávání
while (pocitadlo >= 1) {
if (pocitadlo > 1) {
stav = "Zbývá " + počítadlo + " s do startu !";
}
else {
stav = "Posledni sekunda pred startem !";
}
pocitadlo--; // změní hodnotu počítadla
}
stav = "START!";
Protože cykly while nemají zabudovanou řídící proměnnou cyklu, jsou daleko více náchylné ke vzniku nekonečného cyklu.
Tyto příkazy slouží v JavaScriptu pro „nestandardní“ ukončení cyklů. Příkaz break ukončí „natvrdo“ právě probíhající cyklus. Obvykle se používá ve spojení s nějakou podmínkou (příkaz if). Příkaz continue je naproti tomu používán k ukončení aktuálního opakování cyklu. Když je příkaz continue proveden, je aktuální opakování cyklu ukončeno a začíná nové opakování cyklu. Ilustrace použití příkazů break a continue:
var komentar = "";
var zbytek = 0;
var konec = 3;
var kontrol = 27;
for (k = 1; k <= 10; k++)
{
zbytek = kontrol % k;
if (zbytek == konec)
{
break;
// ukončí cyklus pokud se zbytek rovná konec
}
komentar = kontrol + " děleno " + k
+ " dává zbytek " + zbytek;
}
for (k = 1; k <= 10; k++)
{
zbytek = kontrol % k;
if (zbytek != konec)
{
continue; // pokračuje jenom v případech,
// kdy se zbytek rovná konec
}
// kód JavaScriptu, který bude vykonán v těchto
// případech
}
var stav = "";
var pocitadlo = 42; // inicializace počítadla
while (pocitadlo >= 1) {
// if (pocitadlo < 10) { // upozornění !
// Toto použití continue by vytvořilo nekonečný
// cyklus
continue;
}
if (pocitadlo > 1) {
stav = "Zbývá " + pocitadlo +
" s do startu!";
}
else {
stav = "Poslední sekunda před startem !";
}
pocitadlo--;
}
stav = "START!";
Použití příkazu continue v posledním příkladu vyvolá nekonečný cyklus, protože aktuální opakování cyklu je vždy ukončeno příkazem continue dříve, než dojde k dekrementaci proměnné pocitadlo.