JavaScript中Number类型的假值只有0、-0、NaN三个;Infinity、-Infinity、0n、"0"等虽易被误认,但均为真值或不属于Number假值范畴。

JavaScript 中 Number 类型在逻辑判断中只有特定数值会被当作假值,不是所有“看起来像空或无效”的数字都算。关键看是否严格属于语言定义的 6 个假值之一:其中 Number 类型贡献了 0、-0、NaN 这三个。
哪些 Number 是假值?
只有以下三种数值在 if、&&、|| 或 ! 等布尔上下文中自动转为 false:
-
0(正零)——
if (0) { }不执行 -
-0(负零)——
Object.is(-0, 0)返回 true,但两者在布尔上下文中行为完全一致,都是假值 -
NaN(Not-a-Number)——
typeof NaN === "number",但它既不等于任何值(包括自己),也属于假值
哪些 Number 容易被误认为假值?
这些数值虽然“意义模糊”或“边界异常”,但在逻辑判断中仍是真值:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
Infinity 和 -Infinity —— 数值有效,
Boolean(Infinity)返回 true -
0n(BigInt 零)—— 注意:它不属于 Number 类型,而是 BigInt;
Boolean(0n)是 false,但这是 BigInt 的规则,不归入 Number 假值范畴 -
"0"(字符串) —— 虽然内容是零,但它是字符串,
if ("0")为 true;只有显式转成数字后才可能触发 Number 假值逻辑
实际判断时要注意隐式转换陷阱
逻辑判断本身不自动把其他类型转成 Number 再判真假,但某些操作(如 == 比较)会触发类型转换,导致意外结果:
立即学习“Java免费学习笔记(深入)”;
-
if (Number(" "))→Number(" ")得到 0 → 判为假值 -
if ("0")→ 字符串非空 → 真值;但"0" == 0为 true(因 == 触发转换) -
!NaN为 true,!0为 true,但NaN == 0是 false,NaN === 0也是 false
安全判断数值有效性建议
若目标是区分“有效数字”与“无效输入”,别只依赖 !value:
- 检查是否为数字:
typeof value === "number" && !isNaN(value) - 排除 NaN 和 Infinity:
isFinite(value)(它对 NaN、Infinity、-Infinity 都返回 false) - 想确认是否为 0(含 -0):
Object.is(value, 0) || Object.is(value, -0)

















