JavaScript中NaN
在 JavaScript 中,NaN 是一个特殊的数值,表示 “Not a Number”(非数字)。它通常用于表示数学运算中无法表示的结果,例如无效的算术运算或无法解析的字符串。
1. NaN 的特性
(1) 类型
NaN的类型是number。console.log(typeof NaN); // 输出:number
(2) 不等于自身
NaN是 JavaScript 中唯一一个不等于自身的值。console.log(NaN === NaN); // 输出:false
(3) 全局属性
NaN是全局对象的一个属性,可以通过NaN或Number.NaN访问。console.log(NaN); // 输出:NaN console.log(Number.NaN); // 输出:NaN
2. NaN 的产生
NaN 通常由以下操作产生:
(1) 无效的数学运算:
- 0 除以 0。
- 无穷大除以无穷大。
- 负数开平方。
示例:
console.log(0 / 0); // 输出:NaN
console.log(Infinity / Infinity); // 输出:NaN
console.log(Math.sqrt(-1)); // 输出:NaN
(2) 无法解析的字符串:
- 使用
parseInt或parseFloat解析非数字字符串。
示例:
console.log(parseInt('Hello')); // 输出:NaN
console.log(parseFloat('abc')); // 输出:NaN
(3) 显式赋值:
const result = NaN;
console.log(result); // 输出:NaN
3. 检测 NaN
由于 NaN 不等于自身,因此不能直接使用 === 或 == 检测。以下是几种检测 NaN 的方法:
(1) 使用 isNaN 函数
- 问题:
isNaN会先将参数转换为数字,再检查是否为NaN。 - 行为:对于非数字的值(如字符串),
isNaN也会返回true。
示例:
console.log(isNaN(NaN)); // 输出:true
console.log(isNaN('Hello')); // 输出:true(字符串 'Hello' 转换为数字失败,返回 NaN)
(2) 使用 Number.isNaN 函数
- 改进:
Number.isNaN严格检查一个值是否为NaN,不会进行类型转换。
示例:
console.log(Number.isNaN(NaN)); // 输出:true
console.log(Number.isNaN('Hello')); // 输出:false(字符串,不是 NaN)
(3) 使用 Object.is 方法
- 作用:严格比较两个值是否相同,包括
NaN。
示例:
console.log(Object.is(NaN, NaN)); // 输出:true
4. 处理 NaN
(1) 检查并处理
- 在数学运算后检查结果是否为
NaN,并进行相应处理。
示例:
const result = Math.sqrt(-1);
if (Number.isNaN(result)) {
console.log('计算结果无效');
}
(2) 默认值
- 使用
||或??运算符为NaN提供默认值。
示例:
const value = parseInt('abc') || 0; // 如果解析失败,返回 0
console.log(value); // 输出:0
总结
| 特性 | 描述 | 示例 |
|---|---|---|
| 类型 | number | typeof NaN → number |
| 比较 | 不等于自身 | NaN === NaN → false |
| 检测 | 使用Number.isNaN 或 Object.is | Number.isNaN(NaN) → true |
| 产生原因 | 无效的数学运算或无法解析的字符串 | 0 / 0 → NaN |
NaN 是 JavaScript 中表示无效数值的特殊值,理解其特性和检测方法有助于更好地处理数学运算中的异常情况。
更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github