前端进阶之旅前端进阶之旅
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
基础篇
进阶篇
高频篇
精选篇
手写篇
面经篇
AI 篇
原理篇
每日一题
小程序题库
知识卡片
  • 场景篇按分类整理的大前端场景考点
  • 历年面经按年份追踪真实考点
  • 算法题库NEW在线编码即时判题
  • 专项自测100 题快速查漏
  • 前端基础
    • HTTP从报文一路讲到 HTTPS
    • 浏览器渲染、事件循环、进程
    • 计算机基础Linux、网络、操作系统
  • 进阶专项
    • 设计模式23 种模式怎么用
    • 前端系统进阶学习大型项目工程化
    • 前端综合文章长期沉淀的实践文
  • 工程与工具
    • Node学习指南从环境搭建到服务端
    • NPM工作流script、依赖与发布
    • Docker容器化部署上手
    • Canvas图形与动画实战
  • 路线与导图
    • 思维导图知识点全景图
    • 学习路线按图索骥不跑偏
  • 动态
    • 公众号动态公众号历史文章
    • 博客动态站长的技术博客
    • 开发者导航常用工具与文档站
  • AI 助手随时提问,即时解析
  • AI 模拟面试模拟真实面试 + 报告
  • AI 知识地图串起全站知识点
  • AI 定制路线按你的简历现排
AI 热点
旧版
首页程序员面试题库Infinity JavaScript 无穷大
JavaScript值与类型

JS 里什么运算会产生 Infinity?它参与计算时有哪些特殊行为?

正数除以 0 得到 Infinity,负数除以 0 得到 -Infinity。它们是合法的 number 类型值,可以参与比较和算术,但 Infinity - Infinity 是 NaN,JSON.stringify 会把它们变成 null。

前端进阶之旅 · 一题精讲更新于 2026.09.29
JavaScript#值与类型
先看核心答案读代码示例
理解线索

无穷大在 JS 里的三个特征

  1. 产生方式除以零、数值溢出、显式引用全局 Infinity
  2. 算术规则加减乘遵循数学极限,不确定的情况返回 NaN
  3. 序列化JSON.stringify 输出 null,往返后信息丢失

typeof Infinity 是 "number",isNaN(Infinity) 返回 false。它不是 NaN,它是一个有明确大小关系的数。

核心回答

先记住这个答案

JavaScript 不会在除以零时抛错,而是返回 Infinity 或 -Infinity。这两个值都是合法的 number 类型,可以参与比较和算术。Infinity 大于任何有限数,-Infinity 小于任何有限数。但两个无穷大之间做不确定的运算(比如 Infinity - Infinity)会得到 NaN。检测一个数是不是有限的,用 Number.isFinite()。

  • 除以正负零可得到正负无穷大
  • 0 / 0 得 NaN,不是 Infinity
  • Infinity - Infinity 是 NaN
  • Number.isFinite 不做类型转换

哪些运算会产生无穷大

最直接的方式是正数除以 0,得到 Infinity;负数除以 0,得到 -Infinity。但 0 / 0 是 NaN,因为零除以零在数学上没有确定结果。除了除法,数值溢出也会产生 Infinity。

几种产生 Infinity 的方式JavaScript
console.log(1 / 0);
console.log(-1 / 0);
console.log(0 / 0);
console.log(Number.MAX_VALUE * 2);
console.log(1e309);
console.log(typeof Infinity);
查看输出与解释
Infinity
-Infinity
NaN
Infinity
Infinity
number

Number.MAX_VALUE 大约是 1.8e308,乘以 2 就超出双精度浮点数的表示范围,溢出到 Infinity。同理 1e309 也超出了上限。typeof Infinity 返回 "number",它确实是一个数字值,只是代表无穷大。

无穷大参与算术的规则

Infinity 参与加减乘除时,大部分情况符合数学直觉:任何有限数加上 Infinity 还是 Infinity,Infinity 乘以负数变成 -Infinity。但有几种运算的结果是 NaN,因为数学上它们是不确定的。

无穷大的算术行为JavaScript
console.log(Infinity + 100);
console.log(Infinity * -1);
console.log(Infinity / Infinity);
console.log(Infinity - Infinity);
console.log(Infinity + Infinity);
console.log(Infinity > 1e308);
查看输出与解释
Infinity
-Infinity
NaN
NaN
Infinity
true

Infinity / Infinity 和 Infinity - Infinity 都是 NaN,因为无穷大比无穷大或无穷大减无穷大没有确定的数学结果。但 Infinity + Infinity 仍然是 Infinity,因为正无穷加正无穷在数学上是确定的。 检测一个值是不是有限数,推荐用 Number.isFinite()。它不做类型转换,只对真正的有限数字返回 true。全局的 isFinite() 会先把参数转成数字,isFinite("123") 返回 true,容易误导。

回答前,多想一步

容易答错的地方

以为 0 / 0 是 Infinity
0 / 0 不是 Infinity,是 NaN。只有非零数除以零才产生无穷大。这个区分在数学上也是合理的——零除以零是不定式,没有确定结果。
以为 JSON.stringify(Infinity) 会输出 "Infinity"
JSON.stringify(Infinity) 输出的是 null,因为 JSON 规范不支持无穷大。JSON.parse 之后拿到的是 null,原来的 Infinity 信息就丢了。如果接口需要传递无穷大,得自己约定协议,比如用特定字符串表示。
试着用自己的话回答

面试官还会怎么问?

Number.isFinite() 和全局 isFinite() 有什么区别?

Number.isFinite() 不做类型转换,参数不是 number 类型直接返回 false。全局 isFinite() 会先调用 Number() 转换,所以 isFinite("42") 返回 true,而 Number.isFinite("42") 返回 false。推荐用 Number.isFinite()。

Math.max() 不传参数返回什么?

返回 -Infinity。Math.min() 不传参数返回 Infinity。这看起来反直觉,但是有道理的:Math.max() 需要一个初始值,这个初始值要比任何可能的参数都小,才能被第一个参数覆盖,所以用 -Infinity。

怎么判断一个计算结果是正无穷还是负无穷?

直接用 === Infinity 或 === -Infinity 比较。也可以用 value > 0 && !Number.isFinite(value) 判断正无穷,但直接比较更简洁。Object.is 也能区分,但对于 Infinity 和 -Infinity 来说,=== 已经足够了,因为它们本身就是不同的值。

从一道题,走向一组知识

把知识连起来

值与类型

JS 的 || 和 && 返回的到底是布尔值还是原值?

Infinity || 0 返回 Infinity,因为 Infinity 是真值。逻辑运算符返回原操作数,不会把它变成布尔。

值与类型

什么操作会得到 -0?它和 0 有哪些行为上的区别?

1 / -0 得到 -Infinity,负零的符号通过无穷大的方向暴露出来。

参考资料

  • JavaScript:值与类型参考资料

示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。

本题目录
  1. 先记住这个答案
  2. 哪些运算会产生无穷大
  3. 无穷大参与算术的规则
  4. 容易答错的地方
  5. 面试官还会怎么问
  6. 把知识连起来
读懂,再试着讲出来

先看核心答案,再读代码。最后展开追问,检查自己有没有遗漏边界。

试着回答追问
浏览全部面试题理解原理,也关注真实的使用场景。回到顶部 ↑