JavaScript中如何判断一个变量是不是NaN?

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()这个方法,可以用以下方法判断。

1.根据NaN的定义判断

var a = "str";

var b = 2;

var c = a/b;

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));  // true

2.防止在老版本的浏览器不支持isNaN方法

var a = "str";

var b = 2;

var c = a/b;

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

你可能感兴趣的:(JavaScript中如何判断一个变量是不是NaN?)