Syntaxe JavaScriptu

Úvod

Datové typy a deklarace

Datové typy jsou jednak Deklarace proměnných nejsou povinné, ale doporučují se. Uvozují se klíčovým slovem var, deklarace může obsahovat inicializaci proměnné:
var i, j;
var Jmeno = "Tomas";
var Vystup = false;
Povolenými znaky v identifikátorech proměnných jsou písmena, číslice a podtržítka "_", prvním znakem je povinně písmeno nebo "_".

JavaScript je case-sensitive, tzn. rozlišuje v identifikátorech verzálky/minusky (velká/malá písmena).

Umístění skriptu

JavaScript je velmi "tolerantní" v možnostech umístění kódu. Delší a vícenásobně použitelné skripty umisťujeme do separátních dokumentů, kratší přímo do dokumentu, kde je používáme a ještě kratší fragmenty (např. volání JS funkcí) lze dát přímo do HTML tagů - na místa hodnot atributů - např. ošetření událostí i hodnoty jiných vlastností.

V separátním dokumentu

Skript umístíme do separátního dokumentu (již nikoli HTML) zpravidla s extenzí ".js". Server musí být nakonfigurován, aby soubory s touto příponou chápal jako skripty a posílal v HTTP hlavičce správný MIME-typ (application/x-javascript).

V hlavičce dokumentu, kde chceme daný skript použít, umístíme:
<SCRIPT SRC="url-of-the-script">
... co je zde, se ignoruje, pokud nenastane chyba při čtení externího skriptu!!!
</SCRIPT>

Přímo v dokumentu

Skript uvodíme podobně jako odkaz na externí skript:
<SCRIPT LANGUAGE="JavaScript">
... kód skriptu
</SCRIPT>

Je možné specifikovat verzi JS, např.:
<SCRIPT LANGUAGE="JavaScript1.2">
... kód skriptu
</SCRIPT>

Podporuje-li prohlížeč vyšší verzi JS a definujeme-li např. funkci ve více částech skriptu pro různé verze, prohlížeč si vybere definici pro nejvyšší jím podporovanou verzi. Pro starší prohlížeče (velmi staré...) umístíme skript do komentáře:

<SCRIPT LANGUAGE="JavaScript1.2">
<-- ... kód skriptu
// -- komentář skriptu a konec komentáře HTML -->
</SCRIPT>

Jsou dvě místa pro umístění skriptu přímo v dokumentu:

Přímo v hodnotách atributů

Je možné psát např. <HR WIDTH="&{js_function_name()};%">
. JS vyhodnotí výraz v &{} a přiřadí výsledek do hodnoty atributu. Toto nelze použít pro jména tagů ani atributů, ale pouze pro hodnoty atributů.

Příkazy

Přiřazení

Základním příkazem je přiřazení:
proměnná = výraz
Do proměnné se přiřadí hodnota výrazu uvedeného na pravé straně.

Výraz může obsahovat proměnné a konstanty různě pospojované pomocí operátorů. K dispozic jsou samozřejmě běžné operátory jako '+' (sčítání), '-' (odčítání), '*' (násobení), '/' (dělení) a '%' (modulo -- zbytek po celočíselném dělení). V číselných operacích lze kombinovat celočíselné i reálné hodnoty (pochopitelně má-li to smysl).

delta = y - x;
obvod = 2 * 3.14 * polomer;
palce = centimetry / 2.54;

Inkrementace/dekrementace

Pokud chceme obsah nějaké promměnné zvýšit nebo snížit o jedničku, můžeme použít operátor '++' nebo '--'. Následující dva příkazy jsou ekvivalentní: x = x + 1; x++;

Relační operátory

Opět se shodují s C/C++: :
Rovná se:==
Nerovná se!=
Ostrá nerovnost: < >
Neostrá nerovnost: <= >=

Logické operátory

Logické AND (konjunkce): &&
Logické OR (disjunkce): ||
Logická negace: !

Bitové operátory

Mají smysl pouze pro celočíselné operandy na 32 bitech, v některých případech i pro čísla se znaménkem -- např. bitový posun se zachováním znaménka je vlastně celočíselné dělení dvěma.
AND (po bitech): &
OR (po bitech): |
XOR (po bitech): ^
NOT (inverze bitů, unární operátor): ~
1 bitový posun vlevo (unární operátor): <<
1 bitový posun vpravo (unární operátor): >>
1 bitový posun vpravo se zachováním znaménka (unární operátor): >>>

Řetězcové operace

Zřetězení (konkatenace):
S1 = S2 + S3
Do řetězce S1 přiřadí spojení řetězců S2, S3. Obdobně
S1 += S2
připojí za aktuální obsah řetězce S1 řetězec S2.

Další operátory pro modifikace proměnné

Podobně jako C/C++ nabízí JS operátory '+=', '-=', '*=' a '/=' a další (odvozené z bitových operací) s obvyklým významem.

Podmíněný výraz

Stejně jako v C lze napsat:
podmínka ? ano : ne
Platí-li podmínka, výraz má hodnotu ano, jinak má hodnotu ne.

Příkazy pro práci s objekty

Volání konstruktoru operátorem new (unární operátor, jako v C++)
vytvoří nový objekt, operandem je konstruktor objektu, vrací odkaz na nový objekt.
Zjišťování typu typeof (unární operátor)
vrací řetězec ("undefined", "number", "boolean", "string", "function" a "object") podle typu operandu.

Řízení chodu programu

Větvení

Tvar úplného větvení je následující:
if (cond) Příkaz1
else  Příkaz2
Platí-li podmínka cond, provede se Příkaz1, jinak Příkaz2. Část else je nepovinná.

Cykly

Jsou opět takřka identické se svými protějšky v C/C++. Cyklus for má tvar:
for (počáteční inicializace; pokračovací podmínka; co se provede po každém kroku) Příkaz

Např.:
var i,

faktorial = 1;
for (i=1; i<=n; i++) {
    faktorial *= i;
    }
Cyklus while:
while (cond) Příkaz
Ve větvení a cyklech for i while může mít samozřejmě Příkaz podobu složeného příkazu.

Funkce

V JS programu můžeme definovat a používat funkce. Jejich definici uvádíme před prvním použitím, např. (viz J. Kosek v [Kos]):
function Faktorial(n) {
    if ((n==1) || (n==0)) 
        return 1 
    else 
        return (n * Faktorial(n-1));
    }
Takto definovanou funkci můžeme použít pro vypsání tabulky faktoriálů od 1 do 10: var i; for (i=1; i<=10; i++) { document.writeln(i, "! = ", Faktorial(n)); } Jako výsledek dostaneme tabulku:
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
7! = 5040
8! = 40320
9! = 362880
10! = 3628800

Funkce -- pravidla a odlišnosti

Komentáře

Podobné jako v C/C++.
Ve skriptu se ignoruje a za komentář považuje vše za znaky // až do konce řádku a vše mezi dvojicí /* a */.

Souhrn - tabulka příkazů JS

Uvádíme tabulku všech příkazů JS - i těch, které jsme dosud nezmiňovali.
break
Ukončuje aktuální smyčku (cyklus) a přechází na příkaz následující bezprostředně po ní.

comment
Uvozuje neinterpretovaný komentář.

continue
Skočí na konec bloku uzavřeného v cyklu, tzn. provede ihned další krok iterace.

delete
Zruší prvek pole nebo objektu.

do...while
Jako v C/C++, cyklus s podmínkou na konci; skončí, jakmile podmínka za while přestane platit.

export
Dovoluje podepsanému skriptu nabízet fce, objekty, atd. jiným skriptům.

for
Analogický cyklus jako v C/C++.

for...in
Cyklus, který v každé iteraci přiřadí do řídicí proměnné hodnotu jedné vlastnosti objektu uvedeného za "in" a takto postupně projde všechny vlastnosti.

function
Hlavička deklarace funkce, může mít parametry.

if...else
Úplné větvení programu.

import
Importuje vlastnosti z podepsaného skriptu, ktreý vlastnosti nabídl pomocí "export".

labeled
Identifikátor označující cíl předání řízení pomocí "break" nebo "continue".

return
Specifikuje návratovou hodnotu fce.

switch
Podobně jako v C...

var
Deklarace proměnné, může obsahovat i inicializaci.

while
Jako v C...

with
Jako v Pascalu...