Number.isNaN和isNaN有什么区别?

在JavaScript中,Number.isNaN 和全局的 isNaN 函数都用于确定某个值是否是 "NaN"(Not-A-Number,非数字)。然而,它们的行为在处理非数字值时有显著的区别。

  1. 全局的 isNaN 函数

全局的 isNaN 函数在接收参数后,会首先尝试将参数转换为数字。如果转换成功,则进一步检查转换后的值是否为 NaN。如果转换失败,它仍然会返回 true。这意味着,对于一些非数字值,全局的 isNaN 函数可能会返回 true,即使这些值在转换为数字后并不是 NaN

例如:

isNaN('hello');  // true,因为 'hello' 在转换为数字时失败,所以返回 true
isNaN(123);     // false,因为 123 是一个数字,且不是 NaN
  1. Number.isNaN 函数

相比之下,Number.isNaN 函数在接收参数后,并不会尝试将参数转换为数字。它只会检查参数是否严格等于 NaN。如果参数不是 NaN,那么无论它是什么类型,Number.isNaN 都会返回 false

例如:

Number.isNaN('hello');  // false,因为 'hello' 并不严格等于 NaN
Number.isNaN(NaN);      // true,因为 NaN 严格等于 NaN

总结

  • 全局的 isNaN 函数在检查前会尝试进行类型转换,这可能导致一些非预期的结果。
  • Number.isNaN 函数则更为严格,它只在值严格等于 NaN 时返回 true。这通常使得 Number.isNaN 在判断一个值是否确实是 NaN 时更为可靠。因此,在大多数情况下,推荐使用 Number.isNaN
posted @ 2024-12-19 06:12  王铁柱6  阅读(127)  评论(0)    收藏  举报