请问这样能判断NaN吗?typeof num === "number" && num.toString() === "NaN"

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

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

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

阅读 3.4k
1 个回答

首先问一下你上面说例如字符串等,得到的结果都是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

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题