Syntaxe JavaScriptu
Úvod
- Syntaxe JS vychází opět z jazyka C/C++, najdeme zde však i prvky Pascalu.
- Běh programu je typicky řízen událostmi. Tzn. nejedná se z globálního pohledu o klasické synchronní programování, ale o ošetřování asynchronně vznikajících událostí. Události vznikají zpravidla uživatelskými akcemi (pohybem myší, klikáním, stisky kláves) nad HTML dokumentem obsahujícím skript. Na událost je "zavěšena" většinou funkce (nebo fragment JS kódu), která událost ošetří.
- Program je tvořen sekvencí příkazů, jednotlivé příkazy se od sebe oddělují středníkem.
- Složený příkaz zapisujeme jako sekvenci příkazů oddělených středníkem uzavřenou do složených závorek (jako v C).
- Není možné definovat nové objektové typy (třídy), ale pouze používat třídy standardně existující. Je pouze možné existující třídy instanciovat -- vytvářet objekty.
Datové typy a deklarace
Datové typy jsou jednak
- neobjektové -- číslo, textový řetězec a logická hodnota (má přípustnou hodnotu false a true) a
- objektové typy neboli třídy -- String, Date a Math. Ty umožňují práci s řetezci, s údaji o datu a čase a s matematickými funkcemi.
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
- Funkce může mít parametry, je-li jich více, oddělují se pak čárkou.
- Funkce může vracet hodnotu, která je v ní uvedena za klíčovým slovem return.
- Typ návratové hodnoty ani argumentů (parametrů) se v hlavičce funkce na rozdíl od kompilovaných jazyků (C, Pascal) neuvádí.
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.