Странности NaN в JavaScript

29 июля, 2017 года

NaN - обозначают объект который не является числом.
Обычно NaN используется вместо генерации ошибки в операциях в которых ожидалось числовое значение.

Как получить NaN?

console.log(parseInt('foo', 10)); // NaN
console.log(parseFloat('bar')); // NaN
console.log(0/0); // NaN
console.log(Infinity/Infinity); // NaN
console.log(Number.NaN); // NaN
console.log(NaN); // NaN

Как проверить на NaN?

Функция isNaN() работает не совсем так как ожидается, она вернет истину если встретит любой объект не являющийся числом (а не только NaN).
Чтобы проверить что NaN это NaN нужно сравнить его (!) с самим собой...NaN никогда не равен сам себе.

function isInstanceNaN(v) {
    return v !== v;
}

console.log(isNaN(NaN)); // true
console.log(isInstanceNaN(NaN)); // true
// ES6
console.log(Number.isNaN(NaN)); // true