javascript中&&和||可实现短路赋值,本质是返回实际操作数值而非布尔值:||在左操作数falsy时返回右操作数(常设默认值),&&在左操作数truthy时返回右操作数(常用于安全取值)。

JavaScript 中可以用 &&(逻辑与)和 ||(逻辑或)实现“短路赋值”,本质是利用它们的短路求值特性,在条件成立时直接返回操作数的值,而非单纯的 true/false。这种写法简洁常用,但需理解其返回值规则,否则容易出错。
逻辑或(||)用于提供默认值
当左侧操作数为“真值”(truthy)时,|| 立即返回它,不再计算右侧;只有左侧为“假值”(falsy)时,才返回右侧操作数。因此常用来设置默认值:
-
const name = userInput || "匿名用户"; —— 若
userInput是null、undefined、""、0、false或NaN,就用默认名 -
const config = options || {}; —— 防止
options未传或为 null 时访问属性报错
⚠️ 注意:如果左侧可能是 0、"" 或 false 且这些值是合法输入,就不能用 ||,应改用空值合并操作符 ??。
逻辑与(&&)用于条件性赋值
&& 在左侧为假值时立即返回它;只有左侧为真值,才返回右侧操作数。适合“有 A 才取 B”的场景:
- const title = user && user.profile && user.profile.title; —— 安全地链式取值,任一环节为 falsy 就停止并返回那个值(避免报错)
-
const message = isValid && "提交成功"; —— 仅当
isValid为真时才赋值字符串,否则为false或其他 falsy 值
⚠️ 注意:&& 返回的是操作数值本身,不是布尔值。比如 false && "hello" 返回 false,不是 "hello"。
组合使用实现更灵活的逻辑
两者可嵌套或配合使用,模拟三元运算逻辑,但要控制可读性:
- const result = user && user.isActive ? user.name : "游客"; —— 推荐用三元更清晰
-
const fallback = (user?.settings?.theme || "light"); —— 结合可选链(
?.)和||更安全
不建议过度嵌套如 a && b || c && d,易引发歧义,优先拆解或用 if/else。
关键提醒:它们返回操作数,不是布尔值
这是短路赋值的核心——&& 和 || 不强制转布尔,而是返回**实际参与运算的最后一个被求值的操作数**:
-
0 || "default"→"default"(返回字符串) -
"hello" && 42→42(返回数字) -
null && "never reached"→null(返回 null)
正因如此,才能直接赋值,但也意味着不能假设结果一定是布尔类型。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











