0n在布尔上下文中为false,因其表示“零值”而被视为falsy;所有非零BigInt(如1n、-1n)均为true,该规则与number类型布尔转换行为一致。

是的,0n 在布尔上下文中会被当作 falsy(虚值),和 0、-0、""、null 等一样,会强制转为 false。
BigInt 的布尔转换规则很直接
BigInt 类型在参与条件判断(如 if、??、&&、||)或显式用 Boolean() / !! 转换时,遵循一条简单原则:
-
0n→false - 任何其他 BigInt 值(例如
1n、-1n、100n)→true
为什么 0n 是虚值,而 1n 不是
JavaScript 规定:所有数值类型(包括 number 和 bigint)中,**表示“零”的字面量**,在布尔转换时都视为 falsy。这保持了语义一致性:
-
0、-0、0n都代表“无数量” - 它们不是“未定义”或“无效”,而是明确的“零值”,所以逻辑上等价于 false
- 这种设计让
if (count)这类写法对number和bigint同样可靠
实际代码验证方式
你可以用下面几行快速确认:
console.log(Boolean(0n)); // false<br>console.log(!!0n); // false<br>console.log(Boolean(1n)); // true<br>console.log(Boolean(-5n)); // true<br>console.log(Boolean(0n ? 'yes' : 'no')); // 'no'
注意和 number 的区别仅在类型,不在布尔行为
0n 和 0 类型不同(一个是 bigint,一个是 number),但它们在布尔上下文中的表现完全一致。不要因为类型不同就误以为 0n 会变成 true —— 它不会。
唯一需要警惕的是:0n == 0 返回 true,但 0n === 0 是 false;不过这不影响布尔转换,因为转换只看“是否为零”,不涉及相等性比较。

















