dagblog.
← Archiv

Automatická konverze datových typů v JavaScriptu


K tomuto příspěvku mě vede jeden rozhovor, kdy jsem radil kolegovi
 ohledně určité konstrukce v JavaScriptu. Přesně už si samozřejmě
 nevzpomínám, ale kód byl podobný následujícímu

function acme(id){
foo = document.getElementById(id);
if(!foo){
.
.
}
.
.
}

V podstatě se jednalo o vyhodnocení foo v případě, že volání metody
 getElementById(id) vrátí null. Ve výše uvedeném případě 
 se hodnota null vyhodnotí jako false.

Kolegovi jsem tedy řekl, že v případě, že element s daným id nebude prostě se provede kód
 v if konstrukci. Bohužel jsem jaksi nedokázal dostatečně kvalifikovaně odpovědět na to proč
 se null přetypuje na false.

Vysvětlení tohoto chování musíme začít u netypovosti či dynamické typovosti JavaScriptu. 
 V JavaScriptu nemusíme předem určovat jakého datového typu bude proměnná. Datový typ
 přichází na řadu teprve v kontextu provádění, kde je proměnná přetypována na požadovaný typ.
 V našem případě se vyhodnocuje logická hodnota proto se dynamicky null přetypuje
 na false.

Automatickou konverzi datových typů, popisuje následující tabulka
 (David Flanagen: JavaScript The Definitive Guide, Fourth Edition ISBN 80–7226–626–8),
 podle které se provádí přetypování z jednoho typu na druhý.

HodnotaŘetězecČísloLogická hodnotaObjekt
nedefinovaná hodnota"undefined"NaNfalsechyba
null"null"0falsechyba
neprázdný řetězecbeze změnyčíselná hodnota řetězce nebo NaNtrueobjekt String
prázdný řetězecbeze změny0falseobjekt String
0"0"beze změnyfalseobjekt Number
NaN"NaN"beze změnyfalseobjekt Number
nekonečno"Infinity"beze změnytrueobjekt Number
záporné nekonečno"- Infinity"beze změnytrueobjekt Number
jakékoliv jiné číslořetězcová hodnota číslabeze změnytrueobjekt Number
true"true"1beze změnyobjekt Boolean
false"false"0beze změnyobjekt Boolean
objektvýsledek volání metody toString()výsledek volání metody valueOf nebo toString() nebo hodnotu NaNtruebeze změny

Verze na Medium

Související články

Související epizody CZ Podcastu