Slabikář JavaScriptu – konverze datových typů a priorita operátorů

26. března 2002

Co se stane, když se pokusíte sečíst číslo, numerický řetězec a hodnotu typu Boolean? Podobné situace nastávají v praktickém životě programátora velmi často. Proto jsem se jim rozhodl věnovat speciální díl Slabikáře.

Pokud jediný operátor působí na dvě hodnoty různých datových typů – například sčítáte číslo s numerickým řetězcem, provádíte logický součin (operátor &&) mezi číslem a hodnotou typu Boolean – dochází nejprve ke konverzi operandů na jediný datový typ a až potom k provedení operace. Tyto konverze mají svá přesně definovaná pravidla, která se liší v různých programovacích jazycích.

Příkladem konverze dat je třeba následujících několik řádků JavaScriptu:

var a = 5;
var b = „051“;
var c = true;
var d = a + b + c; // výsledkem je řetězec „5051true“

Pro potřeby součtu došlo k automatické konverzi – všechny hodnoty se převedly na String. Zde je velký rozdíl JavaScriptu od Javy – v Javě k žádným automatickým konverzím nedochází.

Konverze jednotlivých datových typů – tak jak je definovaná v JavaScriptu – ukazuje následující tabulka.

Výstupní datový typ Vstupní datový typ
Boolean Number String Object
Boolean bez konverze false je vstup 0 nebo NaN; jinak true false pro prázdný řetězec („“); jinak true true
Number 1 pro true;
0 pro false
bez konverze Pokud nemůže být interpretováno jako číslo, hodnota je NaN Number Objekt
String „true“ nebo „false“ Absolutní hodnota čísla. Předřazeno znaménko minus, pokud je číslo záporné. Navíc existují výjimky:

  • NaN vrací „NaN“
  • +Infinity vrací „Infinity“
  • -Infinity vrací „-Infinity“
  • bez konverze String Object
    Object Boolean Object Number Object String Object bez konverze

    V prvním výše uvedeném příkladu proběhla implicitní konverze datových typů, kdy zůstává „na vůli“ skriptu, na jaký datový typ budou hodnoty převedeny. Mnohem jistější je přinutit skript k explicitní konverzi. Pokud bude nutné s hodnotami předcházejícího příkladu pracovat jako s čísly, použijte funkci parseInt.

    var a = 5;
    var b = „051“;
    var c = true;
    var d = a + parseInt(b,10) + c; // výsledek bude číslo 57

    Funkce parseInt má jako první argument řetězec převáděný na celé číslo, druhý argument je číselná soustava, ve které je zapsáno číslo v řetězcí. Pokud druhý argument není uveden, zjišťuje se číselná soustava podle číselného prefixu – pokud prefix chybí, použije se desítková soustava, 0x udává hexadecimální a 0 osmičkovou soustavu. Zkuste v předcházejícím příkladu nahradit poslední řádek za:

    var d = a + parseInt(b) + c;

    Výsledek bude 47.

    Pro explicitní konverzi na reálná čísla slouží podobná funkce – parseFloat. Více se o obu těchto funkcích dozvíte v článku JavaScript – datové typy parseInt, parseFloat. Pro konverzi jiných datových typů na String lze použít metodu toString. V tuto chvíli trochu předbíhám výklad o objektech JavaScriptu, jejich vlastnostech a metodách. Chápejte tedy následující kód zatím intuitivně

    var a = 16;
    var c = a.toString(10); // výsledkem je řetězec „16“
    var d = a.toString(16); // výsledkem je řetězec „10“

    Z proměnné a je číslo zkonvertováno do datového typu String, který je uložen v proměnné c. Nepovinným argumentem metody je číselná soustava pro konverzi čísla na řetězec. Metodu toString je tedy možné používat pro převod čísel do různých číselných soustav. Metodu toString lze používat nejen na číselný objekt, jako je použito v příkladu. Zde je vysvětlující tabulka fungování metody toString pro další objekty:

    Objekt Chování metody toString
    Array Prvky objektu Array ze zkonvertují na řetězce. Výsledné řetězce jsou oddělené čárkami.
    Boolean Vrací řetězec „true“ nebo „false“.
    Function Vrací popsaný řetězec, kde functionname je název funkce:

    function functionname( ) { [native code] }

    Number Vrací textovou reprezentaci čísla.
    String Vrací hodnotu řetězcového objektu.
    Ostatní Vrací „[object objectname]“, kde objectname je název typu objektu.

    Při práci s operátory je důležité znát jejich prioritu. I v prioritách operátorů se jednotlivé programovací jazyky liší. Přikládám tedy tabulku, z níž jsou priority operátorů zřejmé – čím výše je operátor v tabulce položen, tím je prioritnější.

    Operátor Popis
    () uzávorkování operací
    ++ — – ~ ! unární operátory
    * / % násobení, dělení, modulo
    + – + sčítání a odčítání čísel, spojování řetězců
    << >> >>> bitové posuvy
    < <= > >= menší než, menší nebo rovno, větší než, větší nebo rovno
    == != === !== rovnost, nerovnost, identita, neidentita
    & bitové AND
    ^ bitové XOR
    | bitové OR
    && logické AND
    || logické OR
    ?: podmínkový ternární operátor

    Tímto pokračováním končíme se základními kameny JavaScriptu, které jsou nutné pro další výklad. V následujících dílech slabikáře již budeme vytvářet skripty. Začneme těmi jednoduššími.

    Štítky: Články

    Mohlo by vás také zajímat

    Nejnovější

    Napsat komentář

    Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *