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

为何直接使用indexOf与通过函数调用indexOf返回结果不同?

为什么string.indexOf()和自定义统计函数返回结果不同?

你看到的结果差异完全正常,因为这两个操作的功能本质就不一样:

  1. longText.indexOf(word) 的作用是返回目标字符串word在longText中首次出现的起始索引位置
    在你的示例文本里,"very"第一次出现的起始位置是索引10,所以直接输出10,这是该方法的标准行为。

  2. 你写的checkWord函数,核心逻辑是通过循环调用indexOf,每次找到匹配后将起始位置向后偏移word.length(避免重复匹配同一位置),最终统计出word在文本中出现的总次数
    示例里"very"一共出现了3次,所以函数返回3,这也符合预期。

另外提个小细节:你的checkWord函数第二个参数命名为position,但调用时传入的是word,不过因为函数内部重新声明了var position = 0;,这个外部传入的参数被覆盖了,所以没影响结果。如果想让函数更健壮,建议修正参数名,比如改成targetWord,让函数不依赖外部变量:

function checkWord(longText, targetWord) {
  let count = 0;
  let position = 0;
  while (true) {
    position = longText.indexOf(targetWord, position);
    if (position !== -1) {
      count++;
      position += targetWord.length;
    } else {
      break;
    }
  }
  return count;
}

简单说就是:一个查「首次出现的位置」,一个算「出现的总次数」,功能不同,结果自然不一样。

内容的提问来源于stack exchange,提问作者Kuroo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:30:42