为何初始将布尔变量isOver设为false?JS循环实现对比
关于布尔变量isOver初始值设为false的疑问
我们有两段功能等价的JavaScript代码:
第一段代码(初始值设为false)
let names = []; let isOver = false; while (!isOver) { let name = prompt("Enter another name or press cancel."); if (name != null) { names.push(name); } else { isOver = true; } } for (let i = 0; i < names.length; i++) { console.log(names[i]); }
第二段代码(调整初始值及相关逻辑)
如果把isOver初始值改为true,需要同步修改循环条件和else分支的赋值,代码如下:
let names = []; let isOver = true; while (isOver) { let name = prompt("Enter another name or press cancel."); if (name != null) { names.push(name); } else { isOver = false; } } for (let i = 0; i < names.length; i++) { console.log(names[i]); }
疑问解答
其实这两种写法功能完全一样,最初把isOver初始值设为false,核心是为了让代码语义更贴合实际业务的初始状态:
- 程序启动时还没开始收集名字,循环显然“还没结束”,用
isOver = false刚好对应这个状态,循环条件!isOver读起来就是“只要没结束,就继续执行循环逻辑”,完全符合人们“开始执行循环→直到触发结束条件才停止”的思维直觉。 - 反观第二段写法,初始就把
isOver设为true,语义上就很别扭:明明循环还没开始,却先标记成“已经结束”,再用“只要结束就继续”的条件来跑循环,和实际业务逻辑的直觉完全相悖。
说白了,第一种写法是用变量状态直接对应业务的真实状态,代码可读性更高,更容易理解。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

