<<< PŘEDCHOZÍ           DALŠÍ >>>


Příkazy a operátory

Základní pracovní jednotka v JavaScriptu, stejně jako ve většině programovacích jazyků, je příkaz. Celý kód JavaScriptu je zpravidla složen pouze z příkazů.

Možná jste zvyklí (např. z Pascalu) příkazy ukončovat středníkem. JavaScript v tomto ohledu dává možnost volby přijetím řádkově orientovaného přístupu psaní kódu. Co to znamená? Příkaz je ukončen poté, co je dosaženo konce řádku (co řádek, to příkaz) a nebo je možné jej ukončit středníkem. Pokud jsou příkazy ukončeny středníkem, lze jich na jeden řádek napsat víc. Z důvodu přehlednosti pište na jeden řádek jeden příkaz.

Mezi nejjednodušší příkazy patří přiřazovací příkaz. Jeho zápis (syntaxe) je následují:

x = T1

Jeho význam (sémantika) je stejný jako v Pascalu. Vykoná se T1 a výsledek je přiřazen proměnné x. T1 se nazývá výraz.

Výraz obsahuje proměnné, konstanty a volání funkcí, různě pospojované pomocí operátorů. Každý operátor má určitou prioritu, která rozhoduje o způsobu vyhodnocování výrazu. Pokud mají operátory shodnou prioritu, výraz se vyhodnocuje zleva doprava. Způsob vyhodnocování výrazu lze ovlivnit použitím závorek. To, co je v nich uzavřeno, se vyhodnocuje přednostně. Vzpomeňte si na matematiku, kde jste se poprvé setkali s předchozími pravidly. Např. u výrazu 5+4*2+10 jste nejprve vypočítali 4*2, protože * má vyšší prioritu než + a až potom jste směrem zleva doprava sečetli čísla, čímž jste dostali výsledek 23. Pokud upravím předchozí výraz přidáním závorek na výraz 5+4*(2+10), počítali by jste určitě jinak. Nejprve by jste vypočítali 2+10, protože to, co je v závorce, má vždy přednost, poté vynásobili 4*12 a nakonec sečetli 5+48 a dostali výsledek 53.

Následuje tabulka operátorů JavaScriptu seřazených od nejvyšší po nejnižší prioritu. Jelikož operátory lze rozdělit na početní, logické, bitové a operátory přiřazení, je ve druhém sloupci uvedeno do které skupiny operátor patří. Třetí sloupec pak obsahuje stručný popis operátoru. Operátory, které navzájem od sebe nedělí volný řádek, mají stejnou prioritu.
 
Operátor Jeho druh Stručný popis    
++ početní preinkrement, postinkrement ++x, x++  k x přičte 1
-- početní predekrement, postdekrement --x, x--  od x odečte 1
! logický logické NOT !x negace 
~ bitový bitové NOT ~x negace bit po bitu
         
* početní násobení x * y  
/ početní dělení x / y  
% početní modulo x % y zbytek po x/y
         
+ početní sčítání, spojování řetězců x + y  
- početní odečítání, unární negace x - y, -x  
         
<< bitový posun do leva x << konst x * 2 na konst
>> bitový posun do prava x >>konst x / 2 na konst
>>> bitový posun do prava bez znaménka x >>>konst |x| / 2 na konst
         
< logický aritmetické a řetězcové srovnávání x < y  
<= logický aritmetické a řetězcové srovnávání x <= y  
> logický aritmetické a řetězcové srovnávání x > y  
>= logický aritmetické a řetězcové srovnávání x >= y  
         
== logický rovnost x == y  
!= logický nerovnost x != y  
         
& bitový bitové AND x & y  
         
^ bitový XOR, tj. bitové exkluzivní OR x ^ y  
         
| bitový bitové OR x | y  
         
&& logický logické AND x && y  
         
|| logický logické OR x || y  
         
? : logický podmínkový výběr   viz. řídící struktury
         
= přiřazení přiřazení x = y  
op= přiřazení souhrnné přiřazení x op= y x = x op y
         
, logický logické spojení x, y  

Logické operátory, kromě logického spojení a podmínkového výběru, vrací booleovskou hodnotu true nebo false podle zásad uvedených v pravdivostní tabulce, kterou jste se učili v matematice. Logické spojení se nejčastěji používá v příkazu for (viz. níže).

Bitové operátory &, |, ^ a ~ vyhodnocují vstupní hodnoty bit po bitu podle zásad uvedených v pravdivostní tabulce. XOR podle ní vrací 1, právě tehdy když jeden vstup je 1.

Přiřazení už bylo vysvětleno výše. U souhrnného přiřazení je op jeden z následujících operátorů: *, /, %, +, -, <<, >>, >>>, &, ^, |.

Početní operátory +, -, *, /, % mají svůj standardní význam. U operátorů ++ a -- je nutné rozlišovat prefixovou a postfixovou notaci. Podrobnější vysvětlení viz. příklad.

Příklad:

Jakou hodnotu bude mít x, y, z a u po provedení příkazů

z = ++x
u = y++

když víme, že x = y = 10?

V prvním příkazu je nejprve vykonáno ++, takže x je 11 a potom je hodnota x přiřazena z, takže z je 11. V druhém příkazu je nejprve vykonáno přiřazení, takže u je 10 a potom ++, takže y je 11. Jedná se o praktickou ukázku rozdílu mezi preinkrementem a postinkrementem. Preinkrement nejprve změní hodnotu svého argumentu a teprve pak je vykonán příkaz či vyhodnocen výraz obsahující preinkrement. Postinkrement pracuje právě opačně, hodnotu argumentu mění až po vykonání příkazu či vyhodnocení výrazu v němž se vyskytuje. Na tento fakt si dávejte pozor, protože se jedná o jeden ze zdrojů velmi špatně odhalitelných chyb. Stejná pravidla platí i pro predekrement a postdekrement.

U příkladů, v nichž je dotaz na hodnotu výrazu nebo proměnné si můžete napsáním jednoduchého skriptu ověřit výsledek. V tomto případě by vypadal asi takto:

Výpis krement.html

// deklarace všech proměnných, vyskytujících se v příkazech
var x = 10

var y = 10
// x a y deklarovány na počáteční hodnotu 10 podle zadání

var z, u

z = ++x // zadaný příkaz

alert("z = " + z + ", x = " + x)
// zobraz alert dialogové okénko s hodnotami z a x

u = y++ // zadaný příkaz

alert("u = " + u + ", y = " + y)
// zobraz alert dialogové okénko s hodnotami u a y


<<< PŘEDCHOZÍ           DALŠÍ >>>