NaN 是什么?NaN === NaN 的结果是什么?如何判断一个值是否为 NaN?

推荐答案

NaN (Not a Number) 是一个特殊的数值,表示一个非数字的值。它通常是数学运算的结果,例如 0/0 或试图将非数字转换为数字时。

NaN === NaN 的结果是 false。NaN 是 JavaScript 中唯一不等于自身的值。

判断一个值是否为 NaN,应该使用 Number.isNaN() 方法,而不是 =====isNaN() 函数会将参数转换为数值,而 Number.isNaN() 不会。

本题详细解读

NaN 的定义和产生场景

NaN,即 Not a Number,是 JavaScript 中一个特殊的数值类型值。它表示一个无法用有效的数字来表示的结果。以下是一些常见的 NaN 产生的场景:

  • 非法的数学运算:
    • 0 / 0
    • Infinity - Infinity
    • Math.sqrt(-1)
  • 试图将无法转换为数字的值转换为数字:
    • parseInt("hello")
    • Number("abc")
  • 涉及 NaN 的任何算术运算结果都会是 NaN:
    • NaN + 5
    • NaN * 10

NaN 的特殊性

NaN 的一个重要特性是它不等于任何值,包括它自己。这就是 NaN === NaN 的结果为 false 的原因。这种特性使得我们不能使用常规的相等比较来判断一个值是否为 NaN。

如何判断一个值是否为 NaN

由于 NaN === NaNfalse,所以我们不能使用相等性判断来判断一个值是否为 NaN。JavaScript 提供了以下两种方法来判断:

  1. Number.isNaN() 方法:

    • 这是推荐的方式。
    • 它会判断传入的值是否为 NaN,并且不会尝试将其转换为数值
    • 只有当值本身是 NaN 或者类型为 Number 且值为 NaN 的时候,才会返回 true。
    • 示例:
  2. isNaN() 函数(不推荐):

    • 此全局函数会先尝试将参数转换为数字,然后判断转换后的值是否为 NaN。
    • 如果参数无法转换为有效的数字,则会被转换为 NaN,从而返回 true,即使原始值不是 NaN。
    • 示例:

为什么不推荐使用 isNaN()?

由于 isNaN() 会进行类型转换,它可能会返回不符合预期的结果,使得判断不准确,因此更推荐使用 Number.isNaN() 来判断是否是 NaN。

使用 Number.isNaN() 可以避免类型转换带来的混淆,更清晰准确地判断一个值是否为 NaN。

纠错
反馈