为何直接使用indexOf与通过函数调用indexOf返回结果不同?
为什么string.indexOf()和自定义统计函数返回结果不同?
你看到的结果差异完全正常,因为这两个操作的功能本质就不一样:
longText.indexOf(word)的作用是返回目标字符串word在longText中首次出现的起始索引位置
在你的示例文本里,"very"第一次出现的起始位置是索引10,所以直接输出10,这是该方法的标准行为。你写的
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
相关产品推荐
相关产品推荐

