带你深入理解isNaN()函数(关于isNaN()出现的问题)

带你深入理解isNaN()函数

对于isNaN()的MDN描述是:

isNaN() 函数用来确定一个值是否为NaN。

如果把 NaN 与任何值(包括其自身)相比得到的结果均是 false,所以要判断某个值是否是 NaN,不能使用 == 或 === 运算符。正因为如此,isNaN() 函数是必需的。

isNaN() 函数其实并不能像它的描述中所写的那样,数字值返回 false,其他返回 true。

实际上,它是判断一个值能否被 Number() 合法地转化成数字

这中间有什么区别呢,主要提现在一些特别的情况如下:

  • 数字形式的字符串。
    例如 “123”、"-3.14",虽然是字符串型,但被 isNaN() 判为数,返回 false。(“12,345,678”,“1.2.3” 这些返回 true)
  • 空值。
    null、空字符串""、空数组[],都可被Number()合法的转为0,于是被isNaN认为是数,返回false。(undefined、空对象{}、空函数等无法转数字,返回true)
  • 布尔值。
    Number(true)=1,Number(false)=0,所以isNaN对布尔值也返回false。
  • 长度为 1 的数组。
    结果取决于其中元素,即:isNaN([a])=isNaN(a),可递归。例如isNaN([[“1.5”]])=false。
  • 数字特殊形式。
    例如"0xabc"、“2.5e+7”,这样的十六进制和科学计数法,即使是字符串也能转数字,所以也返回false。

可能还有其他情况,emm~ 暂时想不到了。欢迎大家补充👏~
总之,很多时候不能用单纯用 isNaN() 去判断。

往期精彩文章

  • 一篇文章带你揭秘现代浏览器原理
  • 带你深入理解什么叫js闭包
  • 使用Object.defineProperty进行数据劫持,实现响应式原理-剖析vue2.0
  • 前端性能优化之rel=“prefetch“预/懒加载功能
  • 前端唤起相机的方法H5+JS
  • docker下YApi部署教程-支持swagger数据导入


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部