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() 函数的怪异行为。
