JavaScript – isNumber(), isNaN(), NaN a ešte jedna zaujímavosť

JavaScript

V minulosti som sa podobnej problematike už venoval, no opätovne sa k nej vraciam. Tentokrát budem demonštrovať použitie isNaN() a NaN v praxi.

K tomuto článku ma viedlo vytvorenie funkcie isNumber(), ktorá je trochu šalamúnska. Nestačí iba zistiť, či hodnota je typu číslo, ale treba ešte skontrolovať či hodnota je naozaj číslo. No a tu sa to trochu začína zamotávať. Ak by sme opäť išli iba smerom, že ideme zistiť či hodnota je číslo a nie typu číslo, opäť by sme dospeli k nesprávnemu riešeniu. Všetko potrebné pochopíte na nasledujúcich príkladoch a výsledkoch, ktoré sú uvedené v komentároch.

Prvým príkladom je funkcia na detegovanie hodnoty. Konkrétne, či hodnota je číslo. A tu prichádza k prvému problému. Natívna funkcia isNaN() totiž spracuje hodnotu aj ak číslo je ako string.

console.log(isNaN(10)); // false
console.log(isNaN("10a")); // true
console.log(isNaN("40")); // false
console.log(isNaN(40)); // false
console.log(isNaN("")); // false

Kvôli tejto skutočnosti je potrebné pri detegovaní čísla vykonať dve kontroly a to kontrolu typu a kontrolu hodnoty, či hodnota je číslo.

function isNumber(value) {
  if (typeof value === "number" && !isNaN(value)) {
    return true;
  } else {
    return false;
  }
}

console.log(isNumber(10)); // true
console.log(isNumber("10a")); // false
console.log(isNumber("1s40a")); // false
console.log(isNumber("40")); // false
console.log(isNumber(40)); // true
console.log(isNumber("")); // false

A teraz sa dostávame konečne k reálnemu použitiu hodnoty NaN.

function updateValue(value) {
    if (isNaN(value)) {
      return NaN;
    }
    return value;
  }

  console.log(updateValue(10));  // 10
  console.log(updateValue("10")); // 10
  console.log(updateValue("10a")); // NaN

A na záver ďalšia špecialitka JavaScriptu. Aj toto má za následok, prečo samotnú funkciu isNaN() nie je možné použiť na zisťovanie, či je hodnota číslo alebo nie.

console.log("" == 0); // true

Záver

O špecialitách JavaScriptu som už napísal článok a spravil aj video. Možno sa k tejto téme ešte niekedy vrátim aj na tomto portáli.

https://www.mldgroup.com

Vyštudovaný top manažér pôsobiaci najmä ako manažér, marketér, softvérový inžinier, konzultant, bloger, YouTuber a zatiaľ neúspešný hudobník a producent. V rámci praxe pôsobil v rôznych odvetviach na rôznych pozíciách v malých aj veľkých firmách, vrátane spoluprác a partnerstiev s významnými firmami či poradenskými spoločnosťami.

Pridaj komentár

Vaša e-mailová adresa nebude zverejnená.