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).