NaN(不是一個數字且數據類型為number椅挣,另外NaN != NaN)是執(zhí)行數學運算沒有成功,返回失敗的結果塔拳。但是這個結果仍然是數字類型鼠证。
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