新闻详情

新闻详情

首页 / 资讯中心 / 详情

Modern JavaScript Tutorial 实战解析:while 循环中 `i--` 的最后一次 alert 值为什么是 1?

发布时间:2026/10/1 10:00:37来源:尧图网络
Modern JavaScript Tutorial 实战解析:while 循环中 `i--` 的最后一次 alert 值为什么是 1?
文档/教程前端【免费下载链接】en.javascript.infoModern JavaScript Tutorial项目地址https://gitcode.com/gh_mirrors/en/en.javascript.info点击查看免费下载本篇实战解析来自开源项目 Modern JavaScript Tutorialen.javascript.info基础章节《Loops: while and for》中的经典思考题。题目考查三个核心 JavaScript 概念的交汇while循环的条件真值检查、后缀递减运算符i--的返回值语义以及循环展开loop unrolling的推导方法。读完本篇你将能独立推导任意while (i) { alert(i--) }形式代码的执行轨迹并理解前缀/后缀形式的细微差别为何会改变循环结果。题目回顾最后弹出的值是多少题目原文位于 task.md代码如下let i 3; while (i) { alert( i-- ); }问题这段代码最后一次alert弹出的值是多少为什么标准答案1。逐行推导把循环展开来看为什么答案是1而不是0关键在于两条规则的叠加while (i)的条件是真值检查——当i为0时条件变为 falsy循环立即停止不会再进入循环体后缀递减i--先返回i的旧值再执行递减。因此alert(i--)弹出的永远是递减之前的值。将循环逐次展开官方解答 solution.md 中的推演过程let i 3; alert(i--); // 显示 3随后 i 减为 2 alert(i--) // 显示 2随后 i 减为 1 alert(i--) // 显示 1随后 i 减为 0 // 循环结束while(i) 检查发现 i 0条件为假不再执行循环体每次迭代使i减少1while (i)在i 0时终止循环。由于递减发生在alert之后后置形式0永远不会被弹出来——它只作为终止条件存在。三个关键知识点拆解1. 任意表达式都可以作为while的条件while的语法与执行语义见 while-for 章节条件不必是比较表达式任何表达式或变量都可以。while会把条件转换为布尔值真值/假值检查falsy 值0、空字符串、null、undefined、NaN、false其余一切值均为 truthy。因此while (i)是while (i ! 0)的简写形式当i变为0时条件为假循环停止。这一点正是本题推导的第一块基石。2. 后缀递减i--返回旧值递增/递减运算符的完整说明位于 operators 章节的 Increment/decrement 小节前缀形式--i先递减再返回新值后缀形式i--先返回旧值再递减。所有运算符都会返回值/--也不例外。当返回值未被使用时两种形式没有区别但本题中alert(i--)恰恰消费了返回值所以弹出的必然是递减前的值。这就是0不会出现在输出中的直接原因。3. 循环体至少执行一次的错觉与do..while对比如果把条件放在循环体之后使用do..while行为就完全不同let i 3; do { alert( i-- ); } while (i);此时循环体至少执行一次最后一次会弹出0递减前返回旧值0随后i变为-1条件为 falsy 才停止。这正是while与do..while的核心差异前者先检查后执行后者先执行后检查。本题使用while所以0永远不会被alert。延伸思考前缀/后缀形式如何改变循环输出本题的姊妹题 Which values does the while loop show 用两段几乎相同的代码展示了前缀/后缀在比较表达式中的差异// 前缀形式输出 1, 2, 3, 4 let i 0; while (i 5) alert( i ); // 后缀形式输出 1, 2, 3, 4, 5 let i 0; while (i 5) alert( i );关键差异在于后缀i 5在比较时用的是递增前的旧值所以当i从4递增到5时比较的是4 5为真循环体多执行一次弹出5。而 Which values get shown by the for loop 则揭示了一个反直觉结论在for循环中i与i作为 step 时输出完全相同均为0到4因为for的 step 表达式返回值不被使用它只是独立执行的一条语句与条件检查分离。这恰好与本题形成对照——返回值是否被消费决定了前缀/后缀差异是否显现。总结与自查清单知识点结论while (i)条件真值检查i为0时循环停止i--返回值后缀形式返回递减前的旧值本题最后弹出的值10仅作为终止条件不会进入循环体前缀形式对照while (i 5)与while (i 5)输出范围不同for的 step 对照i与i输出相同因为返回值未被使用建议动手验证在浏览器开发者工具控制台或 Node.js 中直接运行solution.md中的 可执行示例alert在 Node 中可替换为console.log观察输出序列3, 2, 1再将while改为do..while对比多出的0。这种先推导、后验证的训练方式是掌握循环与运算符语义最有效的方法。更多while/for循环的语法细节break、continue、标签等可继续阅读 Loops: while and for 全文。赞分享文档/教程前端【免费下载链接】en.javascript.infoModern JavaScript Tutorial项目地址https://gitcode.com/gh_mirrors/en/en.javascript.info点击查看免费下载相关推荐JavaScript 循环递减陷阱深入解析 while 循环中 i-- 的最后输出值JavaScript 循环递减陷阱深入解析 while 循环中 i 的最后输出值 导读 在 Modern JavaScript Tutorialjavasc文档/教程前端JavaScript for 循环中的 i 与 i为什么二者输出相同值JavaScript for 循环中的 i 与 i 为什么二者输出相同值 for 循环是 JavaScript 中最常用的循环结构而 i 后缀文档/教程前端JavaScript 教程实战while 循环中 i 与 i 的输出差异which-value-while 习题精解JavaScript 教程实战while 循环中 i 与 i 的输出差异which value while 习题精解 本篇技术指南以 Modern文档/教程前端上一篇如何用QKeyMapper实现游戏手柄到键盘鼠标的终极映射Windows免费按键映射工具完全指南下一篇3分钟极速安装让Word完美支持APA第7版参考文献格式创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

表格结构检测数据集2.zip:标注解析与YOLOv8训练实战 2026/10/1 11:36:34

表格结构检测数据集2.zip:标注解析与YOLOv8训练实战

简介:表格结构检测数据集2.zip 面向文档数字化、表格结构识别(TSR)方向的算法工程师与研究者,用于训练模型自动解析表格中的行、列及跨行跨列合并单元格,可服务于发票、报表、合同等文档的自动化录入与RPA流程。资源共…

阅读更多 →
数据结构 ----- 二叉搜索树 2026/10/1 11:36:33

数据结构 ----- 二叉搜索树

BST,AVL,红黑树共性:本质都是二叉搜索树,都遵守BST规则,中序遍历的结果都是升序有序序列,节点结构都是二叉树节点:数据域左指针右指针基础操作逻辑一致,查找,插入&#x…

阅读更多 →
BRD/MRD/PRD 本质是需求穿透三阶漏斗 2026/10/1 11:36:33

BRD/MRD/PRD 本质是需求穿透三阶漏斗

简介:本资源是一份面向产品经理初学者与进阶从业者的专业文档资料,系统梳理商业需求文档(BRD)、市场需求文档(MRD)和产品需求文档(PRD)的核心定位、适用对象及协同逻辑。重点详解BRD…

阅读更多 →
OpenClaw两步部署实战:阿里云ECS+Docker容器化AI助手落地 2026/10/1 11:36:26

OpenClaw两步部署实战:阿里云ECS+Docker容器化AI助手落地

最近群里好几个朋友都在问我同一个问题:OpenClaw 到底怎么落地跑起来?说实话,第一次搞这个项目的时候我也被它的部署方式折腾了一会,文档写得不算差,但总有些细节要自己试错。后来我在阿里云的一台 2核4G 的 ECS 上把流…

阅读更多 →
报童模型:单周期库存决策的实战指南 2026/10/1 11:36:26

报童模型:单周期库存决策的实战指南

1. 报童问题:一个被低估却天天在用的决策模型你每天早上路过街角报亭,老板是不是总在纠结今天该进多少份报纸?进少了,下午顾客来买发现没货,白丢生意;进多了,卖不完的全变成废纸,血本…

阅读更多 →
Ubuntu 安装配置 MySQL 全攻略:从踩坑到实战排查 2026/10/1 11:36:25

Ubuntu 安装配置 MySQL 全攻略:从踩坑到实战排查

在 Ubuntu 上折腾 MySQL,从我踩过的坑说起如果你现在正准备在自己的 Ubuntu 机器上装一份 MySQL,我建议先别急着复制粘贴命令,而是花五分钟把下面这篇东西看完。我在 Ubuntu 18.04、20.04、22.04 上都部署过 MySQL,也帮朋友处理过…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉