&& 逻辑与操作符

160 阅读2分钟

思考:1&&2 返回什么 答案是2

在 JavaScript 中,表达式 1 && 2 其实是在考察逻辑运算符的行为,尤其是 逻辑与 (&&) 运算符的短路求值(short-circuit evaluation)特性。

1. 逻辑与 (&&) 运算符的工作原理

&& 是逻辑与运算符,通常用于判断两个条件是否都为 true,例如:

javascript
if (condition1 && condition2) {
  // 当 condition1 和 condition2 都为真时,执行此代码块
}

但是在 JavaScript 中,&& 不仅仅用于布尔逻辑,它也可以操作非布尔值。其具体行为如下:

  1. 短路求值:如果第一个操作数为 falsey(例如 false0nullundefinedNaN, 或空字符串 ""),&& 直接返回第一个操作数,且不计算第二个操作数。
  2. 如果第一个操作数为 truthy(例如非空字符串,非零数字,true,对象等),则会计算并返回第二个操作数。

2. 1 && 2 的含义

1 && 2 这个表达式中:

  • 1 是一个 truthy 值(因为所有非零数字在 JavaScript 中都被认为是 truthy)。
  • 根据逻辑与运算符的规则,当第一个操作数为 truthy 时,返回第二个操作数。

因此,1 && 2 的结果是 2,因为:

  • 第一个操作数 1 是 truthy,所以它不会短路,会继续评估第二个操作数。
  • 第二个操作数 2 也被评估,且最终返回。

3. 逻辑与 (&&) 的短路行为示例

以下是一些示例,说明 && 的短路求值特性:

javascript
console.log(0 && 2);     // 输出:0,因为 0 是 falsey,直接返回 0,不会计算第二个操作数
console.log(1 && 2);     // 输出:2,因为 1 是 truthy,返回第二个操作数 2
console.log(null && 5);  // 输出:null,因为 null 是 falsey
console.log('' && 100);  // 输出:''(空字符串),因为空字符串是 falsey
console.log('A' && 'B'); // 输出:'B',因为 'A' 是 truthy,返回第二个操作数 'B'

4. 总结考察点

  1. 逻辑与运算符的短路求值&& 运算符在遇到第一个 falsey 值时就会停止计算,并返回该值;如果第一个值是 truthy,则返回第二个操作数。
  2. truthy 和 falsey 的概念:JavaScript 中,所有值都可以隐式转换为布尔值。truthy 值会被当作 true,而 falsey 值会被当作 false
  3. 非布尔值的返回行为&& 和 || 运算符不仅仅返回布尔值,而是返回操作数本身。

因此,1 && 2 这个表达式的考察点主要是 短路求值truthy/falsey 值的理解