了解NaN,判断该值是否为NaN

文章讲述了JavaScript中的NaN值,它是数值类型的一种特殊值,用于表示非数字。NaN在数学运算中的行为独特,如与其他值比较总是返回false。文章介绍了如何判断一个值是否为NaN,以及Number.isNaN()和isNaN()的区别。此外,还提到了Object.is()方法在比较NaN和其他值时的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

NaN 是一个表示非数字的值。
NaN 是属于数值(Number)类型。

如果 NaN 涉及数学运算(但不涉及位运算),结果通常也是 NaN。(参见下面的反例。)
当 NaN 是任何关系比较(>, <, >=, <=)的操作数之一时,结果总是 false。
NaN 不等于(通过 、!=、= 和 !==)任何其他值——包括与另一个 NaN 值。

NaN !== NaN  // true
NaN === NaN  // false
NaN > 0  // false
NaN < 1  // false
typeof NaN === 'number'  // true

有五种不同类型的操作返回 NaN

失败的数字转换(例如,显式转换,如 parseInt(“blabla”)、Number(undefined),或隐式转换,如 Math.abs(undefined))
计算结果不是实数的数学运算(例如,Math.sqrt(-1))
不定式(例如,0 * Infinity、1 ** Infinity、Infinity / Infinity、Infinity - Infinity)
一个操作数被强制转换为 NaN 的方法或表达式(例如,7 ** NaN、7 * “blabla”)——这意味着 NaN 具有传染性
将无效值表示为数字的其他情况(例如,无效的 Date new Date(“blabla”).getTime()、“”.charCodeAt(1))

判断是否为NaN

要判断一个值是否为 NaN,可以使用 Number.isNaN() 或 isNaN() 来最清楚地确定一个值是否为 NaN ——或者,因为 NaN 是唯一与自身不相等的值,所以你可以执行类似 x !== x 这样的自我比较。

isNaN() 和 Number.isNaN() 之间的区别:如果当前值是 NaN,或者将其强制转换为数字后将是 NaN,则前者将返回 true。而后者仅当值当前为 NaN 时才为 true:

简单来说就是 isNaN 是会进行一次转换的,转换的结果时NaN 也是true
isNaN("hello world"); // true
Number.isNaN("hello world"); // false

NaN !== NaN  // true !==  证明该值是NaN , NaN 是唯一与自身不相等的值

Object.is() 判断NaN
Object.is() 静态方法确定两个值是否为相同值。
Object.is(value1, value2) 要比较的两个value值

如果以下其中一项成立,则两个值相同:

都是 undefined
都是 null
都是 true 或者都是 false
都是长度相同、字符相同、顺序相同的字符串
都是相同的对象(意味着两个值都引用了内存中的同一对象)
都是 BigInt 且具有相同的数值
都是 symbol 且引用相同的 symbol 值
都是数字且
都是 +0
都是 -0
都是 NaN
都有相同的值,非零且都不是 NaN

Object.is(NaN, NaN)  // true
Object.is(NaN, 0 / 0); // true   0 / 0 等于 NaN
Object.is(NaN, Number.NaN); // true
Object.is(obj, {})  // false
Object.is(null, null); // true
Object.is(undefined, undefined); // true
03-14
### 关于 `NaN` 的理解 `NaN` 表示“不是一个数”,通常用于表示未定义或不可表示的数结果。无论是在 JavaScript 还是 Python 中,`NaN` 都具有独特的性质。 #### 特殊属性 - **自不相等**:`NaN` 与任何(包括其自身)都不相等。这意味着直接使用严格等于 (`===`) 或松散等于 (`==`) 来比较两个 `NaN` 总是返回 `false`[^3]。 ```javascript console.log(NaN === NaN); // 输出: false console.log(NaN == NaN); // 输出: false ``` #### 判断方法 由于上述特性,在编程语言中提供了特定的方法来检测 `NaN`: - **JavaScript** - 使用全局函数 `isNaN()` 可以测试传入的参数是否为 `NaN` 或者能否成功转成数字形式下的 `NaN`[^2]。 ```javascript console.log(isNaN("hello")); // true, 因为 "hello" 转换成数字后得到 NaN console.log(Number.isNaN(0 / 0)); // true, 此处直接给出 NaN ``` - 更推荐的方式是利用 ES6 引入的新 API `Number.isNaN()`,它只会在输入确实为 `NaN` 时不加转换地返回真。 ```javascript console.log(Number.isNaN("hello")); // false, 字符串不会自动尝试转换 console.log(Number.isNaN(parseFloat('a'))); // true, parseFloat 返回 NaN ``` - **Python** - 对应库如 NumPy 提供了统一的标准名称 `np.nan` 并且所有大小写变体均指向同一对象实例[^4]。 ```python import numpy as np print(np.nan is np.NaN is np.NAN) # True ``` 对于想要验证某个变量是否确切代表浮点型中的非数状态而言,应该优先考虑这些专门设计的功能而非简单的相等性检查。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值