JavaScript中只有6个假值:false、0(含-0、+0)、''、null、undefined、NaN;其余所有值(包括空数组、空对象、Symbol、BigInt(0n)、new Boolean(false)等)均为真值。

JavaScript 中的隐式布尔转换发生在 if、while、逻辑运算符(&&、||、!)等需要布尔上下文的地方。引擎会自动将非布尔值转为 true 或 false,依据的是“真值(truthy)”和“假值(falsy)”规则。
哪些值是假值(falsy)?
只有以下 6 个值在布尔上下文中会被当作 false:
false-
0(包括-0和+0) -
''(空字符串) nullundefinedNaN
注意:document.all 是历史遗留的特殊对象,在某些浏览器中也表现为 falsy,但不属于标准定义,不应依赖。
其余所有值都是真值(truthy)
只要不是上面 6 个 falsy 值,统统转为 true,包括:
立即学习“Java免费学习笔记(深入)”;
-
'0'、'false'、' '(任意非空字符串) -
[](空数组)、{}(空对象)、new Date()、function(){}(函数) -
Symbol('a')、BigInt(0n)(但0n本身是 falsy) -
new Boolean(false)(包装对象,即使内部值为 false,本身仍是 truthy)
关键点:对象(包括数组、正则、日期等)哪怕内容为空或值为 0,只要它是对象实例,就一定是 truthy。
如何验证某个值的布尔转换结果?
可以用双重取反 !! 显式模拟隐式转换:
!!0 // false<br>!!'hello' // true<br>!![] // true<br>!!{} // true<br>!!null // false
或者用 Boolean() 构造函数(不带 new):
-
Boolean(0)→false -
Boolean({})→true -
Boolean(new Boolean(false))→true(因为是对象)
常见陷阱与建议
隐式转换容易引发意外行为,比如:
-
if (arr) { ... }检查的是数组是否存在,不是是否为空;应写成if (arr.length) -
if (obj.prop)可能因prop是0、''或false而跳过,实际想判断是否undefined应用obj.prop !== undefined - 用
||设置默认值时,value || 'default'在value为0或false时也会触发,默认值可能不符合预期;更安全可用value ?? 'default'(空值合并运算符)
理解 falsy 列表并谨慎使用隐式转换,能让代码更可预测。


















