You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JavaScript中1&&2&&3返回3?求详细解析

JavaScript中1&&2&&3返回3的原因详解

这问题其实是JavaScript逻辑运算符的经典“反直觉”特性,很多刚接触JS的开发者都会被绕到,我来给你把逻辑掰得明明白白~

首先得纠正一个常见误解:JavaScript的&&(逻辑与)不是单纯返回true或false,它返回的是操作数本身,并且遵循「短路求值」规则。

第一步:先搞懂JS里的「真值」和「假值」

JavaScript里只有6种明确的假值:

  • false
  • 0、-0
  • ""(空字符串)
  • null
  • undefined
  • NaN

除此之外的所有值都是「真值」——包括数字1、2、3,甚至空对象{}、空数组[]、字符串"false"这些看起来像“假”的东西,全都是真值。

第二步:拆解&&的执行规则

逻辑与&&的执行逻辑可以总结为:

  1. 从左到右依次评估每个操作数
  2. 一旦遇到第一个假值,立即返回这个假值,不再评估后面的操作数(这就是「短路求值」)
  3. 如果所有操作数都是真值,就返回最后一个操作数

对应你的例子拆解

  • 先看1 && 2:
    第一个操作数1是真值,所以不会短路,继续评估第二个操作数2,也是真值。所有操作数都是真值,所以返回最后一个操作数2——这就是你疑惑的“为什么1&&2返回2”的原因。
  • 再看1 && 2 && 3:
    先执行1&&2得到2(真值),接着用2和3做&&运算,2是真值,继续评估3,依然是真值。所以返回最后一个操作数3。

再举几个例子加深理解

  • 0 && 5:0是假值,直接返回0,不会评估5
  • "" && "hello":空字符串是假值,返回""
  • true && null && "test":null是第一个假值,返回null
  • {a:1} && [2] && 3:所有都是真值,返回3

为什么你之前会以为返回false?

应该是把JavaScript和其他强类型语言(比如Java、C)搞混了——那些语言里的逻辑与确实会返回布尔值,但JS的设计就是让逻辑运算符返回操作数本身,这样可以实现一些便捷的语法(比如const result = maybeValue && defaultValue,当maybeValue为真时用它,否则用defaultValue)。

内容的提问来源于stack exchange,提问作者Nandhini A

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 09:14:30