You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何该循环非无限?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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:27:27