JavaScript中&&和||支持短路求值:&&在左操作数为假值时返回左值、不执行右操作数;||在左操作数为真值时返回左值、不执行右操作数;!为一元运算符,无短路行为。

JavaScript 中的 &&(逻辑与)、||(逻辑或)和 !(逻辑非)都支持短路求值,这是它们的核心行为特征,直接影响表达式是否继续执行右侧操作数。
逻辑与(&&)的短路规则
当左侧操作数为“假值”(falsy)时,整个表达式立即返回该左侧值,不再计算右侧;只有左侧为“真值”(truthy)时,才继续求值并返回右侧结果。
- 0 && console.log('不会执行') → 返回 0(不打印)
- 'hello' && 'world' → 返回 'world'
- null && fetch('/api') → 返回 null(fetch 不触发)
逻辑或(||)的短路规则
当左侧操作数为“真值”时,直接返回该值,右侧不执行;只有左侧为“假值”时,才计算并返回右侧结果。
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- 'default' || 'fallback' → 返回 'default'
- undefined || 42 → 返回 42
- false || console.log('只在这里执行') → 打印,并返回 undefined
逻辑非(!)本身不涉及短路,但常配合使用
! 是一元运算符,只作用于单个操作数,因此不存在“左右两侧”的执行顺序问题,也就没有短路概念。但它常用于构造短路场景的条件判断:
- !value && doSomething():等价于 “如果 value 是假值,则执行 doSomething”
- !!value:将任意值转为布尔值(如 !![] → true,!!'' → false)
- 注意:!a || b 实际等价于 a ? b : true?不对——它其实是 (!a) || b,优先级高于 &&,需加括号明确意图
短路求值的实际用途
短路不是语法糖,而是可被主动利用的编程技巧:
- 默认值赋值:const name = user.name || 'Anonymous'
- 安全访问嵌套属性:user && user.profile && user.profile.avatar(现代可用可选链 user?.profile?.avatar)
- 条件执行副作用:isLoggedIn() && showDashboard()
- 避免报错:obj && obj.method && obj.method()

















