JavaScript isNaN() 函数

JavaScript isNaN() 语法

isNaN() 是 JavaScript 的一个全局函数,它可以用于判断某个值是否为 NaN。NaN,其实是 “Not a Number(非数字)” 的缩写。

NaN 是 JavaScript 中唯一一个不等于自身的值(即 NaN === NaN 为 false)。因此,我们不能使用 “==” 来判断一个值是否为 NaN,而应该使用 “===(严格相等)” 。

Number.isNaN() 方法不同,isNaN() 函数会在判断前尝试将参数转换为一个数字。

语法:

isNaN(value)

说明:

isNaN() 函数会尝试将非数字值转换为数字,其中:

  • 如果 value 是 NaN,则 isNaN() 返回 true。
  • 如果 value 不能被转换为数字,则 isNaN() 返回 true。
  • 如果 value 可以被转换为一个有限的数字、Infinity 或 -Infinity,则 isNaN() 返回 false。

提示:

  • isNaN() 是一个全局函数(顶层函数),我们可以直接调用而无需创建实例。
  • isNaN() 函数有些行为可能比较怪异。在某些情况下,它会先将值转换为数字再判断,可能结果并不符合你的预期。因此在实际开发中,我们更推荐优先使用 Number.isNaN() 这个静态方法来判断。

JavaScript isNaN() 摘要

属于 JavaScript 全局对象
使用频率
官方文档 查看
MDN 查看

JavaScript isNaN() 示例

接下来,我们通过几个简单的例子来讲解一下 JavaScript isNaN() 是如何使用的。

示例 1:isNaN() 基本用法

console.log(isNaN(NaN));          // true
console.log(isNaN(undefined));    // true
console.log(isNaN({}));           // true

console.log(isNaN([]));           // false
console.log(isNaN(null));         // false
console.log(isNaN(true));         // false
console.log(isNaN(false));        // false

运行结果如下。

true
true
true
false
false
false
false

分析:

对于 undefined 和 {},isNaN() 会认为其为 NaN 值,因此返回 true。

而对于 []、null、true、false 等值,isNaN() 会将其转换为对应的数字,然后再进行判断。其中 [] 会转换为 0,null 会转换为 0,true 会转换为 1,false 会转换为 0。

示例 2:isNaN() 判断字符串

console.log(isNaN(""));
console.log(isNaN(" "));
console.log(isNaN("123"));
console.log(isNaN("3.14"));
console.log(isNaN("360deg"));

运行结果如下。

false
false
false
false
true

分析:

在使用 isNaN() 判断字符串时,对于上面例子来说:

  • ""(空字符串)会转换为 0,因此 isNaN() 会判断其值为 false。
  • " "(包含空格的字符串)会转换为 0,因此 isNaN() 会判断其值为 false。
  • "123" 会转换为数字 123,因此 isNaN() 会判断其值为 false。
  • "3.14" 会转换为数字 3.14,因此 isNaN() 会判断其值为 false。

isNaN() 与 Number.isNaN() 的区别

isNaN() 是一个全局函数,而 Number.isNaN() 是一个静态方法,它们的功能是一样的,都是用于判断一个值是否为 NaN。

但在实际开发中,我们推荐使用 Number.isNaN(),而不是 isNaN() 函数。这是因为 isNaN() 函数会将某些值自动转换为数字,然后再进行判断,这种怪异行为可能会导致结果并不符合预期。

示例 3:isNaN() 会导致怪异行为

console.log(isNaN(NaN));           // true
console.log(isNaN(undefined));     // true
console.log(isNaN({}));            // true

console.log(isNaN([]));            // false
console.log(isNaN(""));            // false
console.log(isNaN(true));          // false
console.log(isNaN(false));         // false
console.log(isNaN(null));          // false

运行结果如下。

true
true
true
false
false
false
false
false

分析:

对于 undefined 和 {} 来说,isNaN() 函数会将其转化为 NaN,然后再进行判断,因此返回的是 true。而对于 []、""、true、false、null 等,isNaN() 函数会将其转化为对应的数字,然后再进行判断,因此返回的是 false。

示例 4:Number.isNaN() 不会导致怪异行为

console.log(Number.isNaN(NaN));             // true
console.log(Number.isNaN(undefined));       // false
console.log(Number.isNaN({}));              // false

console.log(Number.isNaN([]));              // false
console.log(Number.isNaN(""));              // false
console.log(Number.isNaN(true));            // false
console.log(Number.isNaN(false));           // false
console.log(Number.isNaN(null));            // false

运行结果如下。

true
false
false
false
false
false
false
false

分析:

使用 Number.isNaN() 方法来判断某个值是否为 NaN,则不会存在 isNaN() 函数的怪异行为。

上一篇: parseFloat()

下一篇: isFinite()

给站长反馈

绿叶网正在不断完善中,小伙伴们如果发现任何问题,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com

「绿叶网」服务号
绿叶网服务号放大
关注服务号,微信也能看教程。
绿叶网服务号