JavaScript中isNaN函数

67 阅读2分钟

JavaScript中isNaN函数

isNaN 是 JavaScript 中的一个全局函数,用于检查一个值是否为 NaN(Not-a-Number)。然而,它的行为有时会让人感到困惑,因此需要结合 Number.isNaN 来理解其用法。

1. isNaN 的功能

  • 作用:检查传入的值是否是 NaN
  • 返回值:如果值是 NaN,返回 true;否则返回 false

2. isNaN 的问题

  • 行为怪异isNaN 会先将参数转换为数字,然后再检查是否为 NaN
  • 结果可能不符合预期:对于非数字的值(如字符串),isNaN 也会返回 true

示例

console.log(isNaN(123)); // false(数字,不是 NaN)
console.log(isNaN('123')); // false(字符串 '123' 转换为数字 123,不是 NaN)
console.log(isNaN('Hello')); // true(字符串 'Hello' 转换为数字失败,返回 NaN)
console.log(isNaN(NaN)); // true(NaN)

3. Number.isNaN 的改进

  • 作用:严格检查一个值是否为 NaN,不会进行类型转换。
  • 返回值:只有当值是 NaN 时,返回 true;否则返回 false

示例

console.log(Number.isNaN(123)); // false(数字,不是 NaN)
console.log(Number.isNaN('123')); // false(字符串,不是 NaN)
console.log(Number.isNaN('Hello')); // false(字符串,不是 NaN)
console.log(Number.isNaN(NaN)); // true(NaN)

4. 使用场景

(1) 检查 NaN

  • 使用 Number.isNaN 严格检查 NaN
    const value = parseInt('abc');
    if (Number.isNaN(value)) {
      console.log('解析失败,值为 NaN');
    }
    

(2) 检查非数字值

  • 如果需要检查一个值是否为数字,可以使用 isNaN 结合类型检查。
    function isNotNumber(value) {
      return typeof value !== 'number' || isNaN(value);
    }
    console.log(isNotNumber('123')); // true(字符串,不是数字)
    console.log(isNotNumber(NaN)); // true(NaN)
    console.log(isNotNumber(123)); // false(数字)
    

总结

函数行为示例推荐使用
isNaN先转换类型,再检查是否为NaNisNaN('Hello')true不推荐
Number.isNaN严格检查是否为NaN,不转换类型Number.isNaN('Hello')false推荐
  • 推荐使用 Number.isNaN:避免类型转换带来的意外行为。
  • 避免直接使用 isNaN:除非明确需要类型转换的逻辑。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github