JavaScript 中的 NaN

发布于 2023-01-30 21:35:44 字数 2205 浏览 135 评论 0

NaN,代表 非数字,是当结果应为数字但结果未定义或不能表示为数字时,JavaScript 从某些函数和操作返回的值。 例如:

  1. parseInt() 回报 NaN 如果解析失败: parseInt('bad', 10)
  2. Math.sqrt() 回报 NaN 如果给定值为负: Math.sqrt(-1)
  3. 数学运算符返回 NaN 当其中一个操作数不是数字时: 2 * NaN, 3 ** undefined, 4 / 'foo' 等。例外是 +、JavaScript 可能将其视为字符串连接。

检查 NaN

最大的怪癖 NaN 是那个 === 操作符返回 NaN 不等于自身

NaN === NaN; // false

检查一个值是否是 NaN,你应该使用 Number.isNaN() 功能:

Number.isNaN(NaN); // true
Number.isNaN('test'); // false

你不应该 使用 旧的全局函数 isNaN(),此函数检查给定值是否会导致 NaN 如果您尝试将其转换为数字,这可能会导致令人惊讶的行为:

isNaN(NaN); // true
isNaN('test'); // true

使用时要小心 typeof 运算符与 NaNtypeof 操作员报告说 NaN 是一个数字!

const v = parseInt('bad', 10);

v; // NaN
typeof v; // "number"

序列化

避免的主要原因之一 NaN 是大多数序列化程序没有很好的支持 NaN

例如, NaN 不可在 JSON 表示。 这 JSON.stringify()函数 转换 NaN 进入 null

const obj = { x: NaN };
JSON.stringify(obj); // '{"x":null}'

另一方面, Mongoose 验证会在数值为 NaN

const Model = mongoose.model('Test', Schema({ test: Number }));
// Throws 'Cast to Number failed for value "NaN" at path "test"'
const doc = await Model.create({ test: NaN });

一般来说,你应该考虑遇到 NaN 一个错误,除非你有充分的理由不这样做。 写作 NaN 到数据库或在 HTTP 请求中通常以导致错误或以 null 价值。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

彡翼

暂无简介

文章
评论
27 人气
更多

推荐作者

李珊平

文章 0 评论 0

Quxin

文章 0 评论 0

范无咎

文章 0 评论 0

github_ZOJ2N8YxBm

文章 0 评论 0

若言

文章 0 评论 0

南…巷孤猫

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文