původně publikovaný v a Drip of JavaScript newsletter.
v JavaScriptu se používá speciální hodnota NaN
(což znamená „Ne Číslo“), která představuje výsledek matematického výpočtu, který nelze reprezentovat jako smysluplné číslo., Například:
je také pravděpodobné, že běh do NaN
při použití parseInt
nebo parseFloat
získat číslo z řetězce, jako v následujícím příkladu:
Jako výsledek, JavaScript vývojáři často potřebují otestovat výsledek proměnnou, aby se zjistilo, zda obsahuje NaN
nebo zda je smysluplné hodnoty místo. Existuje několik různých způsobů kontroly, zda je hodnota NaN
, ale bohužel většina z nich je nespolehlivá., Pojďme projít některé z nich a uvidíme, jak se jim nepodaří.
logickou věcí je zkontrolovat, zda se výsledek rovná NaN
.
Co se tady děje? V JavaScriptu má NaN
rozdíl v tom, že je jedinou hodnotou, která se sama sobě nerovná. To znamená, že nemůžeme zjistit, zda je hodnota NaN
kontrolou rovnosti na NaN
protože odpověď bude vždy ne.
Co jiného bychom mohli vyzkoušet? A co Vestavěná funkce isNaN
?,
úžasné! Zdá se, že tenhle funguje. A ve skutečnosti to funguje za určitých okolností. Nicméně i přes název není účelem funkceisNaN
ověřit, zda je hodnota NaN
. Místo toho je účelem zkontrolovat, zda hodnota nemůže být nucena k číslu. Z tohoto důvodu může vrátit falešná pozitiva., Zvažte následující:
Pokud jste si jisti, že budete jednat pouze s čísly nebo NaN
isNaN
funkce není“t velmi vhodné pro tento účel.
ukázalo se však, že ECMAScript 6 vytváří novou funkci pro konkrétní účel kontroly, zda je hodnota NaN
. Zmateně se tato funkce nazývá takéisNaN
, i když je připojena k objektuNumber
spíše než přímo k globálnímu objektu., Může být použit takto:
vynikající! Máme metodu, která opravdu funguje. Bohužel je k dispozici pouze v novějších verzích Firefoxu a Chrome a zatím není podporován v IE nebo jiných hlavních prohlížečích. V budoucnu to může být životaschopný přístup, ale prozatím jej lze použít pouze za velmi úzkých okolností.
možná můžeme místo toho zkontrolovat NaN
„s type?
Ano, čtete to správně., V JavaScriptu je hodnota NaN
typu number
. To nebude moc užitečné.
takže co můžeme udělat, abychom získali něco, co funguje správně, ale je také k dispozici cross-browser? Pamatujte, jak jsem zmínil, že NaN
je jediná hodnota v JavaScriptu, která se nerovná sobě? Toho můžeme využít.
v současné době je nejlepším způsobem, jak zkontrolovat, zda je hodnota NaN
, zkontrolovat, zda se nerovná sobě. Pokud ano, pak víte, že je to NaN
.,
použití této techniky samozřejmě není zvláště čitelné, takže je běžné jej zabalit do užitkové metody, která sděluje záměr jasněji. Jak podtržítko, tak Lo-Dash poskytují implementace.
doufám, že vám to pomohlo lépe pochopit vtípky NaN
.
Díky za čtení!
Josh Clanton