请问这样能判断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,有什么缺陷吗?求大佬指点。

阅读 936
评论
    1 个回答
    • 2.1k

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

      撰写回答

      登录后参与交流、获取后续更新提醒