前端/移动开发面试题更新 2026-08-05

在 JavaScript 中,全局函数 isNaN 与 Number.isNaN 方法在处理非数值参数时的行为有何不同?请说明各自的判断逻辑及适用场景。

前端/移动开发技术原理JavaScript

考察说明

考查对 JavaScript 中两种 NaN 检测方法底层机制与使用差异的掌握程度。

回答思路

  1. 【回答框架 1】isNaN 是全局函数,执行时会先尝试将参数强制转换为数字,再判断转换结果是否为 NaN。因此,对于非数值类型如字符串、对象等,只要转换失败或结果为 NaN,isNaN 就会返回 true,例如 isNaN('abc') 为 true,isNaN(undefined) 为 true。
  2. 【回答框架 2】Number.isNaN 是 ES6 新增的静态方法,它不会进行类型转换,只有当参数本身是 number 类型且值恰好为 NaN 时才返回 true。因此 Number.isNaN('abc') 为 false,Number.isNaN(NaN) 为 true,Number.isNaN(undefined) 为 false。
  3. 【回答框架 3】区分二者时,关键在于是否发生隐式类型转换。需要检测一个值是否为真正的 NaN(而非可转换为 NaN 的值)时,应使用 Number.isNaN;若意图判断某个值经过转换后是否非数值,则使用全局 isNaN。
  4. 【关键点 1】isNaN 先转数字再判断,非数字类型可能返回 true;Number.isNaN 不转换,仅对 number 类型的 NaN 返回 true。
  5. 【关键点 2】Number.isNaN 是更严格、更可靠的 NaN 检测方法。
  6. 【关键点 3】实际开发中建议优先使用 Number.isNaN。
  7. 【易错点 1】不要用 isNaN 检测一个值本身是否为 NaN,因为字符串等非数值类型也会得到 true。
  8. 【易错点 2】注意 Number.isNaN 不会对参数进行隐式转换,这与全局 isNaN 的行为有本质区别。