一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

JavaScript 的 Number.isNaN 与全局 isNaN 区别

时间:2026-07-15 20:36:49 编辑:袖梨 来源:一聚教程网

应优先使用 Number.isNaN,因其只对 number 类型的 NaN 返回 true 且不转换类型;全局 isNaN 会先调用 Number() 转换再判断,实际检测“能否转为有效数字”,语义模糊易误判。

number.isnan 只认真正的 nan,不转换类型;全局 isnan 先转数字再判断,实际在问“能不能变成有效数字”。日常开发中,绝大多数情况该用 number.isnan。

Number.isNaN:只对 number 类型的 NaN 返回 true

它不做任何类型转换,参数必须是 number 类型且值严格等于 NaN,才返回 true。

  • Number.isNaN(NaN) → true
  • Number.isNaN(0 / 0) → true(结果是 number 类型的 NaN)
  • Number.isNaN("NaN") → false(字符串,不是 number 类型)
  • Number.isNaN(undefined) → false(类型不对)
  • Number.isNaN(null) → false
  • Number.isNaN({}) → false

全局 isNaN:先调用 Number() 转换,再检测是否为 NaN

它内部会把任意类型尝试转成数字,然后看结果是不是 NaN。所以返回 true 并不表示“它是 NaN”,而是“它转不成有效数字”。

  • isNaN("hello") → true(Number("hello") === NaN)
  • isNaN("") → false(Number("") === 0)
  • isNaN(" ") → false(空格字符串也转为 0)
  • isNaN(null) → false(Number(null) === 0)
  • isNaN(undefined) → true(Number(undefined) === NaN)
  • isNaN({}) → true(Number({}) === NaN)

什么时候该用哪一个?

优先使用 Number.isNaN —— 语义明确、行为可预测,适合校验计算结果是否真正失效。

  • 检查运算结果是否产生 NaN,比如 0 / 0Math.sqrt(-1)
  • 配合 Number()parseFloat() 后做精准判断:const n = Number(input); if (Number.isNaN(n)) { … }
  • 需要区分“非数字类型”和“数字类型但无效”时,必须用 Number.isNaN

一个小提醒:别用 === 判断 NaN

NaN 是 JavaScript 中唯一一个不等于自身的值:NaN === NaN 永远是 false。所以永远不要写 value === NaN,它永远不成立。必须用 Number.isNaN()Object.is(value, NaN)(兼容旧环境时)。

立即学习“Java免费学习笔记(深入)”;

热门栏目