JavaScript中falsy值仅有false、0(含±0)、''、null、undefined、NaN共6个,其余均为truthy;显式转换推荐Boolean()或!!,逻辑运算符返回操作数原值而非布尔值。

JavaScript中布尔类型本身只有true和false两个值,但逻辑判断(如if、&&、||、三元运算符等)实际作用的对象往往是任意类型的值。此时JavaScript会按规则将非布尔值“转换”为布尔值来决定分支走向——这叫隐式类型转换,也称“真值(truthy)与假值(falsy)判定”。
哪些值会被当作 false(falsy)?
只有以下6个值在布尔上下文中被认定为false,其余所有值均为true(即 truthy):
-
false(布尔字面量) -
0(数字零,包括-0和+0) -
''(空字符串,注意:' '(含空格)是 truthy) nullundefinedNaN
常见易错的 truthy 值
这些值看似“空”或“无效”,但在逻辑判断中全为true,容易引发意外行为:
-
'0'(字符串零)、'false'、'null'、'undefined'—— 非空字符串都是 truthy -
[](空数组)、{}(空对象)、function(){}(空函数) —— 所有对象(含数组、函数、正则等)都是 truthy -
0n(BigInt 零)—— 是 truthy(不同于数字0) -
new Boolean(false)—— 是对象,因此是 truthy(⚠️不要用构造函数创建布尔对象)
显式转换推荐写法
若需明确转为布尔值,应避免依赖隐式转换,优先使用以下方式:
立即学习“Java免费学习笔记(深入)”;
-
Boolean(value)—— 最清晰、语义明确 -
!!value—— 利用两次取反,简洁常用(!value转一次,再!取反回来) - 慎用
value == true或value === true—— 它们判断的是是否等于布尔true,不是“是否为真值”。例如'1' == true为false,[] == true也为false
逻辑运算符的实际返回值
&& 和 || 并不总是返回true或false,而是返回参与运算的某个操作数的原始值:
-
a || b:返回第一个 truthy 值;若都 falsy,返回最后一个值(如0 || '' || null→null) -
a && b:返回第一个 falsy 值;若都 truthy,返回最后一个值(如1 && 'hello'→'hello') - 常用于默认值设置:
const name = userInput || 'anonymous'(但要注意0、''也会被覆盖)









