doubleyong
管理员
管理员
  • 最后登录2026-05-10
  • 发帖数1198
  • 最爱沙发
  • 喜欢达人
  • 原创写手
  • 社区居民
  • 忠实会员
阅读:3792回复:0

[es5]【图解】isNaN 和 Number.isNaN 函数的区别?

楼主#
更多 发布于:2022-07-01 16:27
图解:

图片:isNaN_Number.isNaN.png



         isNaN vs Number.isNaN




文字描述:

函数 isNaN 接收参数后,会尝试将这个参数转换为数值,任何不能被转换为数值的的值都会返回 true,因此非数字值传入也会返回 true ,会影响 NaN 的判断。


函数 Number.isNaN 会首先判断传入参数是否为数字,如果是数字再继续判断是否为 NaN ,不会进行数据类型的转换,这种方法对于 NaN 的判断更为准确。



mdn引用:

如果isNaN函数的参数不是Number类型, isNaN函数会首先尝试将这个参数转换为数值,然后才会对转换后的结果是否是NaN进行判断。因此,对于能被强制转换为有效的非 NaN 数值来说(空字符串和布尔值分别会被强制转换为数值 0 和 1),返回false值也许会让人感觉莫名其妙。


下一个版本的 ECMAScript (ES2015) 包含Number.isNaN()函数。通过Number.isNaN(x)来检测变量x是否是一个NaN将会是一种可靠的做法。然而,在缺少Number.isNaN函数的情况下,通过表达式(x != x) 来检测变量 x是否是NaN会更加可靠。


另注:
一个isNaN的 polyfill 可以理解为(这个 polyfill 利用了NaN自身永不相等于自身这一特征 ):

var isNaN = function(value) {
    var n = Number(value);
    return n !== n;
};
知识需要管理,知识需要分享
游客


返回顶部

公众号

公众号