为何该循环非无限?foundAtPosition=-1终止循环的原理是什么?
嘿,我来帮你把这个问题掰扯清楚!
为什么这个循环不是无限循环?
- 核心原因是每次循环都会主动更新
foundAtPosition的取值。举个常见的场景例子,比如你在字符串里反复查找某个子串:
你看,每次循环里都会把查找的起始位置往后挪(比如跳过已经找到的那个子串的长度),不会在同一个位置反复查找。随着查找位置不断后移,最终总会走到字符串的末尾,再也找不到目标内容,这时候let targetStr = "apple banana apple orange"; let searchWord = "apple"; let foundAtPosition = targetStr.indexOf(searchWord); while (foundAtPosition !== -1) { console.log("找到啦,位置在:", foundAtPosition); // 关键:从上次找到的位置的下一位开始继续找 foundAtPosition = targetStr.indexOf(searchWord, foundAtPosition + searchWord.length); }foundAtPosition就会变成-1,循环也就停了。 - 要是你忘了在循环里更新这个变量,那才会无限循环——因为
foundAtPosition的值永远不变,只要初始不是-1,循环条件就一直成立。
为什么
foundAtPosition === -1时能终止循环? - 这是绝大多数编程语言里字符串/数组查找方法的通用约定:当找不到目标元素或子串时,就返回-1(因为索引都是从0开始的,-1是一个永远不会出现的合法索引值,刚好用来表示“未找到”)。
- 你的循环条件应该是类似
while (foundAtPosition !== -1),意思是“只有找到目标的时候,才继续执行循环里的逻辑”。一旦foundAtPosition变成-1,就代表“找不到了”,循环条件不满足,循环自然就终止了。
内容的提问来源于stack exchange,提问作者Salah Eddin Berriani
相关产品推荐
相关产品推荐

