var x1 = 5;
var x2 = { text: 'слово' };
var x3 = 5 * 'текст';
var x4 = NaN;
var i = 0;
if (isNaN(x1)) { i++; }
if (isNaN(x2)) { i++; }
if (isNaN(x3)) { i++; }
if (isNaN(x4)) { i++; }
console.log(i); // ??
Что выведет консоль?isNaN() принудительно конвертирует в число то, что получает параметром, а потом проверяет на "не число". Для значения NaN возвращает true.
console.log(isNaN()); // true
console.log(isNaN(undefined)); // true
console.log(isNaN(false)); // false
console.log(isNaN(true)); // false
console.log(isNaN(5)); // false
console.log(isNaN('5')); // false
console.log(isNaN('-5')); // false
console.log(isNaN({})); // true
console.log(isNaN({toString: function(){return 'text';}})); // true
console.log(isNaN({toString: function(){return '-5';}})); // false
console.log(isNaN({valueOf: function(){return 5;}})); // false
console.log(isNaN({valueOf: function(){return '5';}})); // false
console.log(isNaN(NaN)); // true
Для проверки только на значение NaN необходимо использовать метод Number.isNaN() (не поддерживается старыми браузерами без ECMAScript 6).