Na Intervalu vyšly články, které pojednávají podrobněji o číslech a řetězcích v JavaScriptu. Dnes se seznámíme s celkovým pohledem, jak je to s různými typy dat v JavaScriptu. Jde o článek především pro začátečníky v JavaScriptu.

Každý programovací prostředek, a JavaScript mezi ně patří, má do vínku dáno, s jakými typy dat umí pracovat. JavaScript ve svém principu umí pracovat se čtyřmi typy datových hodnot:

  • čísla
  • řetězce
  • logické hodnoty
  • objekty

S těmito čtyřmi typy vykouzlí JavaScript celkem dost. Pokud je totiž potřeba něco dalšího, většinou to skryje pod objekt. Například JavaScript je schopen pracovat s datumem, protože datum považuje za objekt.

V Intervalu už jste mohli číst o číslech ve článku Zaměřeno na čísla a o řetězcích ve článku Zaměřeno na řetězce. To je právě dost k tomu, abych mohl psát o datových typech celkově.

JavaScript zachází s datovými typy velmi volně. Snaží se vás neomezovat a odhadnout každé vaše přání a vyplnit je. Takže pokud třeba napíšete číslo tam, kde čeká řetězec, JavaScript nelení a prostě si číslo na řetězec převede. Například zkuste tento kód:

<html>
<head>
<title>Převod řetězce na číslo</title>
</head>
<body>
<script type="text/javascript" language="JavaScript"><!–
var a = „Celkem: “ + 2 * 8;
alert(a);
// –>
</script>
</body>
</html>

Ve výše uvedeném kódu míchám čísla a řetězce a přesto si JavaScript nebude stěžovat. Pochopí, že si má vypočítat, kolik je 2*8, a výsledek připojí k řetězci „Celkem: „. Výsledkem je zobrazení „Celkem: 16“. Pokud jste opravdu začátečníci a připadá vám to samozřejmé, pak vězte, že v mnoha jiných programovacích nástrojích tomu tak není. JavaScript vám zde ušetří hodně práce.

Další věcí, ve kterém Vám JavaScript nebude překážet je přelétávání od jednoho typu ke druhému. Můžete mít proměnnou (jakýsi šuplík na skladování údaje), do které uložíte číslo. Hned potom tam můžete dát řetězec, či cokoli jiného. To v jiných programovacích jazycích většinou nejde:

<html>
<head>
<title>Převod řetězce na číslo</title>
</head>
<body>
<script type="text/javascript" language="JavaScript"><!–
var a = 3.14;
alert(a);
var a = „To je dnes krásný den“;
alert(a);
// –>
</script>
</body>
</html>

V některých případech je ale „nadměrná inteligence“ JavaScriptu, co se týká datových typů na škodu. Stává se, že občas po něm chceme něco jiného, než by provedl sám. A nebo mu předložíme tvrdý oříšek, který on sám nezvládne. Potom existují donucovací prostředky, jak JavaScript přesvědčit, ay udělal to, co přesně požadujete.

Dost často je potřeba převést řetězec na číslo. Dost často to JavaScript dělá obráceně. Pokud třeba chcete vědět, kolik je „1 počítač“ + 1, JavaScript obvykle řekne, že „1 počítač1“. Stejně tak „1“ + „2“ je „12“. Proto existují převodní funkce parseInt a parseFloat.

Funkce parseInt a parseFloat slouží k vyzískání čísla z řetězce. Obě se liší jenom tím, jaké číslo se snaží vyzískat. Funkce parseInt se snaží získat celé číslo, které nesmí obsahovat nic za desetinnou tečkou. A funkce parseFloat je pro číslo reálné, které může obsahovat i desetinnou tečku a čísla za ním. Podrobněji o rozdílech mezi celým a reálným číslem se můžete dočíst ve článku Zaměřeno na čísla.

Příklad použití parseInt:

<html>
<head>
<title>Převod řetězce na číslo</title>
</head>
<body>
<script type="text/javascript" language="JavaScript"><!–
var a = „1 cukr“ + „2 cukry“;
alert(a);
var a = parseInt(„1 cukr“,10) + parseInt(„2 cukry“,10); alert(a);
// –>
</script>
</body>
</html>

Výše uvedený příklad ukazuje, co provádí funkce parseInt. Nejdříve je použito sčítání cukrů jako řetězce. Poté pomocí alert vypíšeme výsledek a dozvíme se, že „1 cukr“ + „2 cukry“ je „1 cukr2cukry“. Což nás asi neuspokojí. Tak zkusíme pomocí funkce parseInt. Funkce parseInt i parseFloat čekají dva údaje. Prvním je řetězec, ze kterého chceme dostat číslo, a druhý údaj je, v jaké soustavě to číslo má být. Pokud chceme myslet po „člověčím způsobu“, tak my lidé používáme desítkovou soustavu, proto je na druhém místě desítka.

Takže zápis parseInt(„1 cukr“,10) způsobí, že JavaScript najde v řetězci „1 cukr“ číslo jedničku. POdobně zápis parseInt(„2 cukry“,10) najde v řetězci „2 cukry“ číslo dvojku. Pokud sčítám čísla 1 + 2, vyjde mi očekávaná trojka, kterou následně vypíše funkce alert.

Rozdíl mezi parseInt a parseFloat lze vysvětlit třeba takto: parseInt získává pouze celá čísla, takže zápis parseInt(„3.14“,10) získává číslo 3. Zatímco parseFloat(„3.14“,10) získá číslo 3.14, tedy i to, co je za desetinnou tečkou.

Žádný příspěvek v diskuzi

Odpovědět