我们知道判断NaN
的方式主要三种:
1.window.isNaN()
,并不是严格判断真正的NaN,传入不能用Number()
转换的值,例如字符串等,得到的结果都是true。
2.Number.isNaN()
,顽固的IE。
3.很巧妙地利用NaN!==NaN
判断
除了以上三种,用typeof(num) === "number" && num.toString() === "NaN"
是否可以严格判断NaN
,有什么缺陷吗?求大佬指点。
我们知道判断NaN
的方式主要三种:
1.window.isNaN()
,并不是严格判断真正的NaN,传入不能用Number()
转换的值,例如字符串等,得到的结果都是true。
2.Number.isNaN()
,顽固的IE。
3.很巧妙地利用NaN!==NaN
判断
除了以上三种,用typeof(num) === "number" && num.toString() === "NaN"
是否可以严格判断NaN
,有什么缺陷吗?求大佬指点。
13 回答13k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.4k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
3 回答1.3k 阅读✓ 已解决
首先问一下你上面说
例如字符串等,得到的结果都是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