NaN(不是一个数字且数据类型为number,另外NaN != NaN)是执行数学运算没有成功,返回失败的结果。可是这个结果仍然是数字类型。浏览器
var a = "str"; var b = 2; var c = a/b;字符串
console.log(isNaN(a)); // true console.log(isNaN(b)); // false console.log(isNaN(c)); // true数学
这个例子中,a的结果是true,b是false,c是true。对于isNaN来讲,它是判断一个值是否是NaN,若是是则返回true。可是a是一个字符串,用isNaN判断这个变量a的时候仍是会返回true。因此判断一个变量是否为NaN不能使用isNaN()这个方法,能够用如下方法判断。io
1.根据NaN的定义判断。 var a = "str"; var b = 2; var c = a/b;console
function isNaN(n) { if(typeof(n) === "number" && isNaN(n)) { return true; } else { return false; } } console.log(Number.isNaN(a)); // false console.log(Number.isNaN(b)); // false console.log(Number.isNaN(c)); // truefunction
2.防止在老版本的浏览器不支持isNaN方法。 var a = "str"; var b = 2; var c = a/b;class
if(!Number.isNaN) { Number.isNaN = function(n) { return( typeof(n) === "number" && window.isNaN(n)); } } console.log(Number.isNaN(a)); // false console.log(Number.isNaN(b)); // false变量
3.利用NaN是惟一一个不等于任何自身的特色。 var a = "str"; var b = 2; var c = a/b;数据类型
function isNaN(n) { if(n !== n) { return true; } else { return false; } } console.log(isNaN(a)); // false console.log(isNaN(b)); // false console.log(isNaN(c)); // true方法
4.利用ES6中提供的Object.is()方法。 var a = "str"; var b = 2; var c = a/b;
console.log(Object.is(a, NaN)); // false console.log(Object.is(b, NaN)); // false console.log(Object.is(c, NaN)); // true