0

我们知道判断NaN的方式主要三种:

1.window.isNaN(),并不是严格判断真正的NaN,传入不能用Number()转换的值,例如字符串等,得到的结果都是true。
2.Number.isNaN(),顽固的IE。
3.很巧妙地利用NaN!==NaN判断

除了以上三种,用typeof(num) === "number" && num.toString() === "NaN"是否可以严格判断NaN,有什么缺陷吗?求大佬指点。

深客 6
9月5日提问
1 个回答
0

已采纳

首先问一下你上面说例如字符串等,得到的结果都是true,你的意思是需要判断字符串状态的数字么?

如果是的话,利用typeof(num) === "number" && num.toString() === "NaN"不能严格的判断NaN,比如num='a',通过上面的表达式运算的结果为false

可以使用Number.isNaN(Number(num))或者Number.isNaN(Number.parseInt(num)) / Number.isNaN(Number.parseFloat(num))判断,区别是前者对字符串12a的结果为true,后者对字符串12a的判断结果为false,对'abc''a12'结果都为true


更新:

typeof(num) === "number" && num.toString() === "NaN"可以判断出来是否为NaN
个人感觉用typeof(num) === 'number' && window.isNaN(num)更好一点。

Number.isNaN可以直接判断出来NaN,但是window.isNaN不行,例如window.isNaN('12a')true,但是Number.isNaN('12a')false

撰写答案

推广链接