NaN

A globális NaN egy olyan változó, ami a Not-A-Number típusú értéket reprezentálja.

Property attributes of NaN
Writable no
Enumerable no
Configurable no

Leírás

A NaN a globális objektum része. Más szavakkal a globális scope egyik változója.

A NaN eredeti jelentése: Not-A-Number (nem szám). Értéke a Number.NaN-nal egyenlő. Modern böngészőkben a NaN nem beállítható, nem írható változó. Ellenkező esetben sem tanácsolt felüldefiniálni. A NaN közvetlen használata egy programban igen ritka.

Öt különböző típusú műveletet különböztethetünk meg, aminek az eredménye NaN:

  • A szám nem értelmezhető (pl.: parseInt("blabla") vagy Number(undefined))
  • Olyan matematikai művelet, ahol a végeredmény nem valós szám (pl.: Math.sqrt(-1))
  • Olyan művelet, ahol bármelyik operandus maga is NaN (pl.: 7 ** NaN)
  • Nem meghatározható alak (pl.: 0 * Infinity, vagy undefined + undefined)
  • Bármilyen művelet, ami szöveggel operál és nem összeadás, vagy hozzáfűzés (pl.: "foo" / 3)

Példák

Tesztelés NaN esetre

NaN nem összehasonlítható (az ==, !=, ===, és !== operátorokkal) semmilyen más értékkel. -- beleértve magát a NaN értéket. Ahhoz, hogy valamiről biztosan eldöntsük, hogy NaN a Number.isNaN(), illetve a isNaN() függvényeket használhatjuk. Alternatívaként összehasonlíthatjuk a változót saját magával, mert a NaN, és csak is a NaN az az érték, ami nem egyenlő önmagával.

NaN === NaN;        // false
Number.NaN === NaN; // false
isNaN(NaN);         // true
isNaN(Number.NaN);  // true
Number.isNaN(NaN);  // true

function valueIsNaN(v) { return v !== v; }
valueIsNaN(1);          // false
valueIsNaN(NaN);        // true
valueIsNaN(Number.NaN); // true

Fontos felhívni a figyelmet az isNaN() és a Number.isNaN() közötti különbséget: míg az előbbi true-val tér vissza akkor is, ha az érték éppen NaN, és akkor is ha az a kiértékelés után NaN-ná válik, úgy az utóbbi csak akkor tér vissza true-val, ha az érték éppen NaN:

isNaN('hello world');        // true
Number.isNaN('hello world'); // false

Továbbá, bizonyos tömbfüggvények nem használhatók a NaN keresésére, míg vannak, amik igen.

let arr = [2, 4, NaN, 12];
arr.indexOf(NaN);                      // -1 (false)
arr.includes(NaN);                     // true
arr.findIndex(n => Number.isNaN(n));   // 2

Specifikáció

Böngésző kompatibilitás

BCD tables only load in the browser

Lásd még