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