JavaScript中NaN

167 阅读2分钟

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 是全局对象的一个属性,可以通过 NaNNumber.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) 无法解析的字符串

  • 使用 parseIntparseFloat 解析非数字字符串。

示例

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

总结

特性描述示例
类型numbertypeof NaNnumber
比较不等于自身NaN === NaNfalse
检测使用Number.isNaNObject.isNumber.isNaN(NaN)true
产生原因无效的数学运算或无法解析的字符串0 / 0NaN

NaN 是 JavaScript 中表示无效数值的特殊值,理解其特性和检测方法有助于更好地处理数学运算中的异常情况。

更多vue相关插件及后台管理模板可访问vue admin reference,代码详情请访问github