JavaScript中只有6个falsy值:false、0、-0、""、null、undefined、NaN;其余所有值(如"0"、[]、{}、Infinity等)均为truthy,隐式转换基于ToBoolean规则,不调用Boolean()函数。

JavaScript 中其他数据类型转布尔值,靠的是“真假值(truthy/falsy)规则”,不是调用 Boolean() 函数,而是引擎在 if、while、逻辑运算符(&& || !)、三元表达式 等布尔上下文中自动执行的隐式转换。
哪些值会被当成 false(falsy)?
只有以下 6 个原始值在布尔上下文中会隐式转为 false:
- false(本身)
- 0 和 -0
-
""(空字符串,注意:包含空格的
" "是 true) - null
- undefined
- NaN
ES6 后还新增了 0n(BigInt 零)和极少数环境下的 document.all,但日常开发中基本只记上面 6 个就够了。
其余所有值都是 true(truthy)
只要不是上面那几个 falsy 值,一律视为 true,包括:
-
"0"、"false"、" "(带空格的字符串) -
[](空数组)、{}(空对象) -
function(){}、/regex/、new Date() -
Infinity、-1、0.0001
简单记法:JS 不看“内容有没有意义”,只看“是不是真的空或数值上为零”。[] 不是空——它是个存在的对象;"0" 不是空字符串——它是有字符的。
常见隐式转换场景示例
这些地方不会写 Boolean(x),但 JS 自动做了转换:
-
if ([]) { ... }→ 进入分支([]是 truthy) -
while ("") { ... }→ 不执行(""是 falsy) -
!![] === true(双重取反是模拟隐式转布尔最紧凑的方式) -
0 || "default"→ 返回"default"(因为0被当 false,触发 || 的右侧) -
console.log(Boolean && true)→ 输出true(Boolean函数本身是对象,truthy)
注意:和显式转换的区别
隐式转换 ≠ Boolean(x),但结果一致。区别在于:
- 隐式转换是语言底层行为,不调函数,不可拦截
-
Boolean(x)是显式调用,可读性好,适合调试或明确意图 -
!!x是隐式转换的快捷写法,语义清晰、性能略优,常用于条件赋值,比如:const isValid = !!value;
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











