尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
en.javascript.info 逻辑运算符实战:深入解析 `alert( alert(1)  alert(2) )` 的输出与短路求值
文档/教程前端【免费下载链接】en.javascript.infoModern JavaScript Tutorial项目地址https://gitcode.com/gh_mirrors/en/en.javascript.info点击查看免费下载导读本篇文章基于 en.javascript.infoModern JavaScript Tutorial入门篇「First Steps / 逻辑运算符」章节中的经典练习题 4-alert-and逐行拆解alert( alert(1) alert(2) )的真实输出过程为什么屏幕上先显示1、紧接着显示undefined而不是1和2。通过本篇文章你将彻底掌握 JavaScript 中AND运算符返回第一个假值的求值规则、alert函数无返回值返回undefined的语义以及短路求值short-circuit evaluation在真实代码中的表现并顺带理解||、的优先级差异。任务回顾这道题到底问什么题目定义于 4-alert-and/task.md原文如下What will this code show?alert( alert(1) alert(2) );这是一个嵌套调用外层alert的参数是一个表达式而该表达式自身的两个操作数又分别是alert(1)和alert(2)两个函数调用。要得到正确答案必须同时理解两件事alert(...)函数的返回值是什么运算符对非布尔操作数的处理规则。标准答案与执行过程官方答案见 4-alert-and/solution.md先输出1然后输出undefined。完整代码为alert( alert(1) alert(2) );整个执行过程可以拆解为如下几步计算左操作数JavaScript 先从左到右求值的第一个操作数alert(1)。弹窗显示1拿到返回值alert函数只负责展示消息没有任何有意义的返回值因此调用alert(1)返回undefined触犯短路规则undefined是假值falsy。的求值规则是查找第一个假值并返回它——既然左操作数已经是假值立即停止求值不再执行右操作数alert(2)外层输出整个表达式的值就是undefined外层alert把它显示出来于是屏幕上第二次弹窗显示文本undefined。关键结论alert(2)从未被执行所以2永远不会显示。这正是短路求值最直观的体现。为什么alert返回undefined函数无返回值的语义alert是浏览器环境提供的全局函数window.alert它仅负责弹出对话框并阻塞等待用户确认函数本身不返回任何值。在 JavaScript 中一个没有return语句或return后不带表达式的函数其返回值一律是undefined。这是解答本题的第一块基石。同样的逻辑也出现在同章节另一道题 2-alert-or/solution.md 中alert( alert(1) || 2 || alert(3) )先输出1再输出2。那里alert(1)返回undefined后||继续向右寻找第一个真值找到2便停止alert(3)同样不会被调用。两道题对照阅读可以清晰看到||与在寻找目标值上的镜像关系运算符求值目标停止条件返回内容\|\|(OR)第一个真值遇到真值即停返回该真值的原始形式(AND)第一个假值遇到假值即停返回该假值的原始形式两者所有值都遍历完未触发停止条件返回最后一个操作数的完整求值规则返回第一个假值11-logical-operators/article.md 中明确给出了的扩展算法。对于一串 AND 表达式result value1 value2 value3;其求值过程是从左到右依次求值每个操作数对每个操作数做布尔转换truthy/falsy如果结果是false即该值是假值立即停止并返回该操作数的原始值不做类型转换如果所有操作数都求值完毕即全部为真值返回最后一个操作数。换句话说AND 返回第一个假值若没有假值返回最后一个值。普通布尔语义只是这一规则的特例——当操作数本身是布尔值时true true返回truefalse true返回false与两者皆真才为真的经典定义一致。为了加深理解article.md 中还有几组基础示例alert( 1 0 ); // 0第一个操作数为真值AND 返回第二个操作数 alert( 1 5 ); // 5 alert( null 5 ); // null第一个操作数是假值直接返回它忽略第二个 alert( 0 no matter what ); // 0 alert( 1 2 null 3 ); // null第一个假值 alert( 1 2 3 ); // 3全部为真值返回最后一个本题alert(1) alert(2)正是第一个操作数是假值直接返回它并忽略第二个操作数这一规则的应用场景只不过操作数是带副作用的函数调用使得忽略的后果2不显示清晰可见。同章节练习题 3-alert-1-null-2/task.md 也从纯值角度验证了同一规则alert( 1 null 2 )输出null因为null是列表中第一个假值见 3-alert-1-null-2/solution.md。短路求值函数调用何时不会发生短路short-circuit是指一旦结果已经确定剩余操作数就不再被求值。这在操作数只是普通值时看不出区别纯值求值无副作用但一旦操作数是变量赋值、函数调用等带副作用的表达式影响立刻显现。article.md 中用||演示了这一特性true || alert(not printed); // 第一行|| 看到 true 立即停止alert 不执行 false || alert(printed); // 第二行|| 继续求值alert 执行本题则是的短路左操作数alert(1)求值后得到假值undefined右操作数alert(2)便永远不会被求值。理解这一点是写出高效、无多余副作用代码的前提——例如用条件 副作用函数()代替if时必须清楚函数只在条件为真时才被调用。article.md 特别提醒虽然可以被当作if的简写如(x 0) alert(Greater than zero!)但官方建议各用其所——需要if语义就用if需要 AND 语义才用因为if的可读性更高。优先级高于||时的求值顺序本题只有单个不涉及优先级问题但作为同章节知识的延伸理解运算符优先级有助于处理更复杂的表达式。article.md 明确指出的优先级高于||因此a b || c d等价于(a b) || (c d)。这道知识在同章节练习题 5-alert-and-or/task.md 中得到验证alert( null || 2 3 || 4 )的输出是3。推导过程见 5-alert-and-or/solution.md为先执行2 3返回3全部真值返回最后一个表达式化简为null || 3 || 4||从左到右寻找第一个真值3胜出。对照本题alert(1) alert(2)两者的本质区别在于找假值、||找真值alert返回的undefined在中直接终止求值而在||中则会被跳过继续向后查找。在浏览器中亲手验证本题源码位于仓库 4-alert-and/你可以打开任一浏览器开发者工具的控制台如 Chrome DevTools Console粘贴并执行alert( alert(1) alert(2) );观察现象第一次弹窗显示1点击确定后第二次弹窗显示undefined全程不出现2。作为对比再执行alert( alert(1) || 2 || alert(3) );会看到第一次弹窗显示1、第二次显示23同样不会出现——这正是 2-alert-or/solution.md 中OR 找第一个真值规则的实机演示。通过两个实验并排观察AND 找假值短路与OR 找真值短路两种机制便一目了然。小结本题背后的三条核心规则alert无返回值它只展示消息调用结果恒为undefined返回第一个假值左操作数alert(1)产生undefined假值求值立即停止右操作数alert(2)被短路跳过短路求值决定副作用被跳过的函数调用不会执行所以2永不显示外层alert最终输出表达式结果undefined。这三条规则贯穿整个 11-logical-operators/article.md 章节也适用于||、!及后续的空值合并运算符??的学习。建议按顺序完成同章节的 2-alert-or、3-alert-1-null-2、5-alert-and-or 练习题用一组对照实验把逻辑运算符的值返回语义内化为直觉。赞分享文档/教程前端【免费下载链接】en.javascript.infoModern JavaScript Tutorial项目地址https://gitcode.com/gh_mirrors/en/en.javascript.info点击查看免费下载相关推荐JavaScript 逻辑运算符 OR 短路求值实战解析 alert( alert(1) || 2 || alert(3) ) 的输出JavaScript 逻辑运算符 OR 短路求值实战解析 alert alert 1 || 2 || alert 3 的输出 alert alert 1文档/教程前端JavaScript 逻辑运算符实战解析 alert( alert(1) alert(2) ) 的短路求值之谜JavaScript 逻辑运算符实战解析 alert alert 1 alert 2 的短路求值之谜 导读 本文围绕 Modern JavaScrip文档/教程前端JavaScript 短路求值实战拆解 alert( alert(1) || 2 || alert(3) ) 的输出顺序JavaScript 短路求值实战拆解 alert alert 1 || 2 || alert 3 的输出顺序 本篇技术指南以 Modern JavaScri文档/教程前端上一篇Crawl4AI 快速上手从零安装到 5 分钟跑通第一个网页爬虫下一篇gh_mirrors/mi/misbrands合规指南企业使用恶搞贴纸的风险规避策略创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

Grok 4.7 API升级详解:稳定性优化与开发者适配指南

Grok 4.7 API升级详解:稳定性优化与开发者适配指南

1. Grok 4.7 不是“新模型”,而是API层的一次精准外科手术 Grok 4.7 这个名字一出来,很多开发者第一反应是:“又出新大模型了?”——其实不是。它既不是参数量翻倍的下一代,也不是架构重构的全新版本,而是…

📅 2026/10/1 8:07:48
Agent 开发实战:用 Laya 和 Jev 构建判断器,让智能体从能跑到靠谱

Agent 开发实战:用 Laya 和 Jev 构建判断器,让智能体从能跑到靠谱

1. 从“能跑”到“靠谱”:为什么你的 Agent 需要一个判断器做 Agent 开发的朋友大概率都经历过这个阶段:Demo 跑通了,工具调用也接上了,看着模型一步步执行任务,感觉一切都很美好。但一旦把它放到真实场景里&#xff0…

📅 2026/10/1 8:02:48
从“翻标书翻到眼瞎”到“AI一键搞定”:三款主流标书制作工具横评实测

从“翻标书翻到眼瞎”到“AI一键搞定”:三款主流标书制作工具横评实测

干了十年投标,我最怕的不是熬夜写标书,而是每次拿到一份几百页的招标文件,第一反应不是“这项目能不能中”,而是“这文件什么时候能读完”。人工逐页翻找评分标准、技术需求、废标条件,稍不留神漏看一条,整…

📅 2026/10/1 8:02:48
MORE NEWS

更多资讯

📰

AI生成法律文书选哪家国内推荐优质甄选服务覆盖全国

随着法律需求的普及和数字化工具的发展,AI生成法律文书已经成为很多律师、法务和普通用户提升办事效率的首选,不过市面上相关服务商质量参差不齐,很多用户不知道该怎么选到靠谱的服务。 行业普遍痛点与市场需求 当前法律AI文书服务行业普遍存…

📰

零代码搭建AI-Agent实战:从入门到进阶的完整指南

1. 为什么“零代码”是AI-Agent落地的第一站1.1 从“写代码”到“搭积木”的思维转变很多人第一次听到“AI-Agent”这个词,脑子里浮现的都是满屏的Python代码、复杂的API调用、各种向量数据库和模型部署。我刚开始接触的时候也是这个反应,觉得这东西门槛…

📰

阿里云CPFS全栈自研高性能存储:AI训练成本降低69%的工程实践

1. 从"存储吃掉一半预算"说起:CPFS到底在解决什么问题做过大模型训练的人都有一个共同体会:算力账单虽然贵,但真正让人肉疼的往往是存储。一个千亿参数级别的模型,训练数据集动辄几十TB到上百TB,checkpoint每…

📰

2026年亚太工业微生物培养基蛋白胨理化分析与选型指南

文章目录一、工业微生物培养基配制中蛋白胨的营养屏障二、107213颗粒型酪蛋白胨物理形态与理化常数三、高溶解度与低粉尘颗粒化加工的物理化学机制四、环境潮湿条件与加样称量中时间因子的控制五、品牌内酪蛋白胨与大豆蛋白胨物理规格段落对比六、苛养微生物发酵与食品药性检测…

📰

DeepSeek弹性计算精读:从vLLM部署到API接入的工程实践指南

拿到“DeepSeek Elastic Compute (DSec)精读”这个标题,我最开始以为又是哪个新出的模型命名,真正去翻了一圈资料才发现,它说的不是某个具体的模型,而是一整套把DeepSeek这类开源模型变成“可弹性伸缩的推理服务”的架构思路和工具…

📰

migrate 快速上手指南:用 CLI 与 Golang 库管理数据库迁移的全流程

数据库开发工具CLI 【免费下载链接】migrate Database migrations. CLI and Golang library. 项目地址: https://gitcode.com/gh_mirrors/mi/migrate 点击查看 免费下载 这篇指南以 GETTING_STARTED.md 为主体,系统讲解 golang-migrate(即 m…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬