摘要: 本教程将介绍 JavaScript 的 NaN,如何检查一个值是否为 NaN,以及如何有效地处理 NaN。
JavaScript NaN 简介
JavaScript 拥有 数字 类型,它允许你表示数字,包括整数和浮点数。JavaScript 数字有一个特殊的值叫做 NaN,它代表非数字。
NaN 是 全局对象 的属性。全局对象在 Web 浏览器中是 window 对象
window.NaNCode language: JavaScript (javascript)在 Node.js 中是全局对象。
global.NaNCode language: CSS (css)NaN 的类型为 number,如以下代码所示
console.log(typeof NaN); // numberCode language: JavaScript (javascript)检查一个值是否为 NaN
JavaScript 提供了全局函数 isNaN(),如果其参数为 NaN,则返回 true
isNaN(valueToCheck)Code language: JavaScript (javascript)例如
const result = 100 + 0 / 0;
console.log(isNaN(result)); // trueCode language: JavaScript (javascript)为什么要使用 NaN
JavaScript 使用 NaN 作为对数字进行失败操作的结果,包括
- 解析数字
- 使用
undefined作为操作数 - 使用
NaN作为操作数 - 使用不确定的形式
- 将无效参数传递给数学函数
操作返回 NaN
1) 解析数字
在 JavaScript 中,你可以将一个数字 字符串 转换为数字。例如
const input = '100';
const num = parseInt(input);
console.log(num); // 100Code language: JavaScript (javascript)如果 JavaScript 无法将字符串转换为数字,它将返回 NaN。在这种情况下,NaN 表示解析失败。例如
const input = 'X100';
const num = parseInt(input);
console.log(num); // NaNCode language: JavaScript (javascript)使用 isNaN 函数验证解析结果是一个良好的做法
const input = 'X100';
const num = parseInt(input);
// set num to 0 if parsing failed
if (isNaN(num)) {
num = 0;
}
console.log(num); // 0Code language: JavaScript (javascript)在这个例子中,解析失败,因此它返回了 NaN。条件 isNaN(num) 为真,因此数字被赋值为 0。
2) 使用 undefined 作为操作数
使用 undefined 作为操作数的表达式将返回 NaN。例如
console.log(undefined * 2); // NaNCode language: JavaScript (javascript)在实践中,你将经常处理 undefined。例如,当你访问 HTML 元素的非存在属性并将其用于计算时。
避免在计算中使用 undefined 是一个良好的做法。
3) 使用 NaN 作为操作数
当表达式包含 NaN 时,它始终返回 NaN。例如
const result = 10 + 1 / NaN;
console.log(result); // NaNCode language: JavaScript (javascript)4) 使用不确定的形式
当算术运算处于不确定的形式时,它将返回 NaN。例如
const result = 10 + 0 / 0;
console.log(result); // NaNCode language: JavaScript (javascript)5) 使用数学函数的无效参数
当数学函数接收无效参数时,它将返回 NaN。例如
const result = Math.sqrt(-1);
console.log(result); // NaNCode language: JavaScript (javascript)在这个例子中,Math.sqrt() 返回一个数字的平方根。由于它只接受非负数,因此传递 -1 将导致 NaN。
总结
- NaN 代表非数字。它是全局对象的
NaN属性的特殊值。 - NaN 表示对数字的失败操作。
- 使用
isNaN()函数检查一个值是否为NaN。
本教程对您有帮助吗?