Příkaz–výraz vznikne prostým zapsáním výrazu do posloupnosti příkazů, smysl však má pouze ten výraz, ve kterém se vyskytuje přiřazovací, inkrementační či dekrementační operátor nebo volání funkce, tedy takové výrazy, které modifikují hodnotu některé proměnné. Hodnota, kterou příkaz–výraz vrací se ignoruje.
a=10
i++
moje_funkce()
Složený příkaz vzniká uzavřením více příkazů do složených závorek:
{
posloupnost příkazů
}
Značky // a /*, */ jsou příkazy JavaScriptu, které označují text komentáře, veškerý text nalézající se mezi znakem // a koncem řádky a mezi znaky /* a */ je považován za komentář a ignorován.
Příkaz var slouží k deklaraci proměnných:
var identifikátor_proměnné [= hodnota_proměnné][, …]
Ačkoli je v JavaScriptu dovoleno deklarovat proměnnou přiřazením hodnoty identifikátoru proměnné, je doporučeno pro přehlednost při deklaraci proměnné příkaz var používat. Pokud v těle funkce deklarujeme lokální proměnnou stejného jména jako jména některé globální proměnné, je příkaz var při deklaraci lokální proměnné nezbytný:
var Prom = 21
function Funkce() {
var Prom = "Ahoj!"
}
Podmíněný příkaz if umožňuje programu pokračovat v jedné z alternativ výpočtu podle vypočítané logické hodnoty:
if ( podmínka )
příkaz
[ else
příkaz ]
například:
if (typeof(co_je_to) == 'object')
alert('Je to objekt.')
else
alert('Není to objekt.')
Příkaz switch umožňuje programu pokračovat více než dvěma způsoby podle vypočítané hodnoty výrazu:
switch (řídící_výraz) {
case hodnota:
příkazy
break
case hodnota2:
příkazy
break
…
[ default: příkazy ]
}
například:
var Prom = 2
switch(Prom) {
case 1:
alert('Číslo 1')
break
case 2:
alert('Číslo 2')
break
default: alert('Nějaké číslo')]
}
Postupně jsou procházeny větve case a pokud hodnota řídícího_výrazu odpovídá hodnotě za case, provedou se příkazy v patřičné části case, pokud ani jedna hodnota za case neodpovídá hodnotě řídícího_výrazu, provádí se příkazy ve větvi default.
Příkazy cyklu slouží k opakovanému provádění některé části programu, opakování se provádí buď po dobu platnosti nějaké podmínky, nebo pro všechny vlastnosti objektu. Příkazy cyklu mohou být ovlivňovány ve svém těle příkazy continue (otestuj podmínku a proveď opakování) nebo break (ukonči příkaz cyklu).
Příkaz while má tvar:
while (podmínka)
příkaz
například:
var prom = 1
while(prom <= 10) {
document.write(prom + ', ')
prom+=1
}
/* program vypíše čísla od 1 do 10 */
Příkaz while opakovaně vykonává příkaz ve svém těle tak dlouho, dokud je hodnota podmínky true. Pokud je hodnota podmínky false, příkaz while příkaz ve svém těle neprovede.
Příkaz do..while má tvar:
do
příkaz
while (podmínka)
například:
var prom = 1
do
document.write(prom + ', ')
prom+=1
while(prom<=10)
/* program vypíše čísla od 1 do 10 */
Příkaz do .. while opakovaně vykonává příkaz ve svém těle dokud je hodnota výrazu v podmínce rovna true. Narozdíl od příkazu while se příkaz v těle příkazu do .. while provede alespoň jednou.
Příkaz for má tvar:
for ( [inicializiční výraz] ; [podmínka] ; [modifikační výraz] )
příkaz
například:
for(prom=1; prom <= 10; prom++)
document.write(prom + ', ')
/* program vypíše čísla od 1 do 10 */
Před prováděním cyklu se vypočte inicializační výraz. Dále se otestuje podmínka a pokud je její hodnota true, vykoná se příkaz v těle příkazu for. Na závěr se vypočte modifikační výraz a přejde se znovu na test podmínky.
Každá část v kulatých závorkách smí být vynechána a je pak nahrazena hodnotou true, takže příkaz cyklu bude vykonáván věčně (může být přerušen příkazem break a pokud je uveden v těle funkce, i příkazem return).
for( ; ; ){
/* nekonečná nicnedělající smyčka */
}
Příkaz for .. in slouží k provedení činnosti pro všechny vlastnosti objektu. Řídící–proměnná postupně nabývá hodnot jmen všech vlastností objektu.
for ( řídící–proměnná in objekt )
příkaz
například:
function Hvezda(jmeno, vzdalenost_od_Zeme, svitivost) {
this.jmeno = jmeno
this.vzdalenost_od_Zeme = vzdalenost_od_Zeme
this.svitivost = svitivost
}
var Slunce = new Hvezda('Slunce', 0, 1)
for (var i in Slunce)
document.write(i + ', ')
/* program vypíše názvy vlastností objektu Slunce */
Příkazy break a continue slouží k modifikaci provádění cyklů. Příkaz break ukončí provádění příkazu cyklu. Příkaz continue přeskočí zbytek těla cyklu, u příkazu for provede modifikační výraz a stejně jako u příkazu while okamžitě přejde na testování podmínky:
for(i=1; i<=10; i++) {
if (i % 2 ==0) continue
if (i==7) break
document.write(i + ', ')
}
/* program vypíše čísla 1, 3, 5 */
Příkaz label slouží ve spojení s příkazy break a continue k určení místa v programu (návěstí), kam se přejde při volání break či continue.
identifikátor_návěstí:
například:
cast_a:
for (var i = 0; i <= 2; i++) {
document.write('vnější cyklus, ')
cast_b:
for(var j = 0; j <= 4; j++) {
if (j == 2)
continue cast_b
if (j == 3)
continue cast_a
document.write(j + ', ')
}
}
/* příkaz continue cast_a skočí na začátek programu */
nebo:
cast_a:
for (var i = 0; i <= 2; i++) {
document.write('vnější cyklus, ')
for(var j = 0; j <= 4; j++) {
if (j == 3)
break cast_a
document.write(j + ', ')
}
}
Příkazem label tak lze označit příkaz cyklu neboť příkazy break a continue se používají právě s příkazy cyklů. Volání break či continue s identifikátorem_návěstí pak specifikuje, kterou část kódu opustit nebo opakovat.
Příkaz with umožňuje přistupovat k vlastnostem a metodám objektu zkráceným způsobem. Objekt je identifikován pouze jednou v hlavičce příkazu a v těle příkazu je poté možno používat samotná jména vlastností a metod identifikovaného objektu:
with ( objekt )
příkaz
například (objekt Slunce vznikl v příkladu for .. in):
with (Slunce) {
jmeno='Slunce'
vzdalenost_od_Zeme = 0
svitivost = 1
}
je ekvivalentní zápisu:
Slunce.jmeno='Slunce'
Slunce.vzdalenost_od_Zeme = 0
Slunce.svitivost = 1
Příkaz function slouží k deklaraci podprogramu – funkce. Funkce umožňuje použít část kódu programu opakovaně v různém kontextu a umožňuje rozdělit kód programu do menších, přehlednějších celků. Schéma deklarace funkce:
function identifikátor_funkce ([identifikátor][,
identifikátor...]) {
posloupnost–příkazů
}
Funkce je ukončena po provedení posloupnosti příkazů ve svém těle, může být však předčasně ukončena příkazem return:
return [výraz]
Pokud je uveden výraz za return, je jeho vypočtená hodnota vrácena do místa volání funkce.
Parametry funkce jsou v těle funkce přístupné jak pomocí svých identifikátorů, tak také jako prvky pole arguments, které je implicitní proměnnou funkce. Počet parametrů je určen vlastostí arguments.length. Při volání funkce se neprovádí žádná kontrola počtu parametrů a pokud je uvedeno méně parametrů, mají neuvedené parametry hodnotu undefined, přebytečné parametry jsou dostupné pouze jako prvky pole arguments, nikoli přes svůj identifikátor.
Funkci vyvoláme příkazem–výrazem, kde výraz je volání funkce:
identifikátor–funkce ([výraz][, výraz...])
například:
function napis(retezec, opakovani) {
if (opakovani + '' == 'undefined')
opakovani = 1
for(i = 1; i <= opakovani; i++)
document.write(retezec)
return retezec
}
/* funkce vrací hodnotu proměnné retezec */
napis('Pokus! ', 5) /* volání funkce napis */
document.write(napis('Další pokus! ', 0))
/* jiné volání funkce napis využívá návratovou hodnotu */
Spolupráce příkazů export a import lze použít pouze ve skriptech, které byly z bezpečnostních důvodů elektronicky podepsány (signed scripts).
Příkaz export umožňuje programu JavaScriptu předávat jinému JavaScriptovému programu hodnoty proměnných, vlastností, funkcí a objektů:
export jméno_elementu1, jméno_elementu2, …
nebo:
export *
Naopak příkaz import umožňuje programu v JavaScriptu taková data od jiných programů přijímat:
import objekt.jméno_elementu1, objekt.jméno_elementu2, …
nebo:
import objekt.*
Počty uvedených exportovaných a importovaných elementů si musí odpovídat a příkaz import hodnoty zpřístupňuje jako vlastnosti některého existujícího objektu. Program může data importovat pouze z programu nataženého ve vrstvě nebo rámu okna, ve kterém je sám zobrazen.
Prázdný příkaz je zvláštním příkazem neboť nemá žádný efekt a nevykonává žádnou činnost:
;
Prázdný příkaz lze použít k provedení příkazu cyklu s prázdným tělem:
var Pole = new Array(10)
for(var i = 0; i < Pole.length; Pole[i++] = 0);
/* program nastaví hodnoty všech prvků pole na 0 */
Ovladače jsou JavaScriptové funkce, které jsou volány v okamžiku, kdy nastane některá standartní událost (například kliknutí na tlačítko) – ošetřují vzniklou událost. Některé ovladače jsou vestavěny v JavaScriptu, jiné mohou být deklarovány dodatečně tvůrcem stránky. Ovladač lze přiřadit přímo jako hodnotu atributu se jménem ošetřované události ve značce, která deklaruje element generující událost:
<INPUT TYPE="button" VALUE="Klikni"
onClick="alert('Kliknul jste na tlačítko.')">
<!-- při kliknutí na tlačítko je vypsána zpráva -->
Nebo lze umístit, jako hodnotu atributu se jménem ošetřované události, volání již deklarované funkce:
<HTML>
<HEAD>
<SCRIPT>
function Kliknuti(){
alert ('Kliknul jste na tlačítko')
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="formular">
<INPUT TYPE="button" NAME="tlacitko" VALUE="Klikni"
onClick="Kliknuti()">
</FORM>
</BODY>
</HTML>
Další možností deklarace ovladače je deklarovat ovladač jako funkci a odkaz na ni vložit do události příslušného objektu:
<HTML>
<HEAD>
<SCRIPT>
function Kliknuti(){
alert('Kliknul jste na tlačítko')
}
</SCRIPT>
</HEAD>
<BODY>
<FORM NAME="formular">
<INPUT TYPE = "button" NAME = "tlacitko"
VALUE="Tlačítko">
<SCRIPT>
document.formular.tlacitko.onclick = Kliknuti
/* odkaz na funkci v události onclick */
</SCRIPT>
</BODY>
</HTML>
Důležitou vlastností JavaScriptu je, že pokud je instalován jakýmkoli způsobem vlastní ovladač nějaké události, je možné rozhodnout, zda bude následně vyvolán ještě implicitní ovladač dané události. Pokud totiž námi instalovaný ovladač, nevrátí jako svou hodnotu true, provede JavaScript ještě implicitní ošetření příslušné události.
Toto je patrné například při zobrazování nápovědy na stavové řádce při posunu kurzoru myši nad odkaz, bez true jako návratové hodnoty funkce napis a příkazu return v těle ovladače události onMouseOver, provede JavaScript ještě implicitní ošetření události – zobrazí URL, které odkaz reprezentuje a přepíše tak námi vypsanou zprávu:
function napis() {
window.status = 'Odkaz na Seznam'
return true
}
…
<A HREF="www.seznam.cz" onMouseOver="return napis()">
Odkaz na Seznam</A>
Upozorňuji však, že ošetření události submit a reset formuláře, kde implicitní ošetření událostí je odeslání nebo zresetování formuláře, bude provedeno naopak právě pokud bude návratová hodnota instalovaného ovladače true.