JavaScript 中的 NaN

发布于 2023-01-30 21:35:44 字数 2205 浏览 125 评论 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技术交流群

发布评论

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

关于作者

彡翼

暂无简介

0 文章
0 评论
24 人气
更多

推荐作者

已经忘了多久

文章 0 评论 0

15867725375

文章 0 评论 0

LonelySnow

文章 0 评论 0

走过海棠暮

文章 0 评论 0

轻许诺言

文章 0 评论 0

信馬由缰

文章 0 评论 0

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