javascript 中的逻辑与 && 运算符采用从左到右的短路求值策略:如果第一个操作数(左操作数)为真值,则返回第二个操作数的值;如果第一个操作数为假值,则直接返回该假值,不再计算第二个操作数。这种机制常用于条件判断、默认值赋值或函数执行控制。

&& 在布尔表达式中如何跳过右侧代码
当左侧表达式为假时,右侧代码完全不会执行。例如使用 console.log 作为副作用测试,可以验证这一点。

let result = false && console.log('This will not print');运行上述代码,控制台没有任何输出,因为 false 是假值,&& 短路了右侧的 console.log 调用。如果将左侧改为真值如 true,则右侧会执行并打印文本。
立即学习“Java免费学习笔记(深入)”;
&& 在非布尔值中返回哪个操作数
&& 并不总是返回布尔值,而是返回第一个“决定结果”的操作数的原始值。若左侧为真值,返回右侧值;若左侧为假值,返回左侧值。

let a = 'hello' && 'world'; // a is 'world' let b = '' && 'world'; // b is '' let c = null && 'world'; // c is null let d = 0 && 'world'; // d is 0
在上述示例中,'hello' 是真值,所以返回右侧 'world';而 ''、null 和 0 都是假值,因此分别返回自身。这种行为使得 && 非常适合用于设置默认值,例如 let name = input || 'default' 的反向用法 let valid = data && data.process() 可确保仅在 data 存在时才调用方法。
基于 undefined 输入的条件判断结果
当左侧操作数为 undefined 时,由于它是假值,&& 会短路并直接返回 undefined,右侧表达式不会被求值。这在防御性编程中非常有用,可以避免对空对象访问属性时抛出错误。
let obj = undefined; let value = obj && obj.property; // value is undefined, no error thrown
在此例中,obj 为 undefined,属于假值,因此 && 立即返回 undefined,右侧的 obj.property 根本不会被执行,从而避免了 TypeError。这与使用可选链操作符 ?. 的效果类似,但 && 更通用,适用于任何类型的假值检查。


















