JavaScript中&&和||返回操作数本身而非布尔值:||返回首个真值或最后一个假值,&&返回首个假值或最后一个真值;falsy值仅6个(false、0、-0、0n、""、null、undefined、NaN)。

JavaScript 中的 && 和 || 不是单纯返回 true 或 false,而是先对操作数做隐式布尔判断(ToBoolean),再根据真假值决定返回哪个操作数本身。
逻辑或(||)的隐式转换逻辑
|| 从左到右依次判断每个操作数是否为真值(truthy)。一旦遇到第一个真值,就立即返回它;如果所有操作数都是假值(falsy),则返回最后一个操作数。
-
0 || "hello"→ 返回"hello"(因为0是 falsy,继续看右边) -
null || undefined || 42→ 返回42 -
"" || false || 0→ 返回0(全部 falsy,返回末尾那个)
逻辑与(&&)的隐式转换逻辑
&& 同样从左到右判断。遇到第一个假值就立刻返回它;若所有操作数都为真值,则返回最后一个操作数。
-
"hi" && 123→ 返回123(两个都是 truthy) -
0 && "abc"→ 返回0(0是 falsy,不继续计算右边) -
[] && {} && "ok"→ 返回"ok"(空数组和空对象都是 truthy)
哪些值会被当作 falsy?
只有以下 6 个值在 ToBoolean 转换中结果为 false:
立即学习“Java免费学习笔记(深入)”;
false-
0、-0、0n(零值) -
""(空字符串) nullundefinedNaN
其余所有值——包括 "0"、"false"、[]、{}、function(){} 等——都是 truthy。
常见误用与提醒
别把 && 和 || 当作“取布尔结果”的工具,它们本质是“选值”运算符:
-
if (a && b)中,a && b的值可能是字符串、数字或对象,但if会再对这个结果做一次 ToBoolean 判断 -
const name = user.name || "anonymous"是安全的默认值写法,依赖的是||的短路特性 -
arr && arr.length > 0可防止arr为null或undefined时访问.length报错


















