JavaScript中Number类型的特殊数值需专用方法检测:NaN应使用Number.isNaN()(不强制转换类型,更精准),Infinity和-Infinity用Number.isFinite()判断。

JavaScript 中 Number 类型的特殊数值(如 NaN、Infinity、-Infinity)虽然属于 number 类型,但不能用常规的 typeof 或 === 可靠识别。关键在于:它们是数值,但行为异常,需用专用方法检测。
检测 NaN 的正确方式:使用 Number.isNaN()
NaN 是唯一不等于自身的值,所以 value !== value 可作为判断依据,但更推荐标准、语义清晰的方法:
-
Number.isNaN(value)—— 推荐。只对参数为NaN且类型为number时返回true;不会强制转换类型,避免误判(例如Number.isNaN("NaN")返回false) - 避免用全局
isNaN()—— 它会先尝试把参数转成数字,导致isNaN("abc")返回true,但isNaN(" ")或isNaN({})也可能为true,不够精准
检测 Infinity 和 -Infinity:用 Number.isFinite()配合类型检查
Infinity 和 -Infinity 是合法的 number,但不属于“有限数”。因此:
-
!Number.isFinite(value)为true且typeof value === 'number'时,说明该值是Infinity、-Infinity或NaN - 进一步排除
NaN后,可用value === Infinity或value === -Infinity精确区分 - 注意:
1 / 0、Number.POSITIVE_INFINITY都等价于Infinity;同理-1 / 0等价于-Infinity
一次性识别所有特殊数值的实用函数
可封装一个简洁工具函数,统一处理常见边界情况:
立即学习“Java免费学习笔记(深入)”;
function isSpecialNumber(value) {
if (typeof value !== 'number') return false;
if (Number.isNaN(value)) return 'NaN';
if (value === Infinity) return 'Infinity';
if (value === -Infinity) return '-Infinity';
return false; // 普通数字
}调用示例:isSpecialNumber(NaN) → 'NaN',isSpecialNumber(123) → false,便于分支处理。
注意事项与常见误区
-
typeof NaN、typeof Infinity都是"number",不可用于区分 -
NaN == NaN和NaN === NaN均为false,绝不能用相等比较来检测 -
Infinity - Infinity、0 / 0等运算结果是NaN,不是Infinity - JSON 序列化会丢弃
NaN和Infinity(转为null),传输前需显式处理


















