JavaScript 中的 NaN
NaN
,代表 非数字,是当结果应为数字但结果未定义或不能表示为数字时,JavaScript 从某些函数和操作返回的值。 例如:
parseInt()
回报NaN
如果解析失败:parseInt('bad', 10)
Math.sqrt()
回报NaN
如果给定值为负:Math.sqrt(-1)
- 数学运算符返回
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
运算符与 NaN
: typeof
操作员报告说 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 技术交流群。
上一篇: 在 Lodash 中比较两个对象
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论