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

为何在JavaScript代码中需用-1而非0才能正确运行?

问题原因解析

先看两种代码的核心差异:

正常运行的代码逻辑:

let str = "Hello world";
let target = "o";
let pos = -1;
while ((pos = str.indexOf(target, pos + 1)) != -1) {
  console.log( pos );
}

出问题的代码逻辑:

let str = "Hello world";
let target = "o";
let pos = 0;
while ((pos = str.indexOf(target, pos)) != -1) {
  console.log( pos );
}

关键在于indexOf的第二个参数

str.indexOf(searchValue, fromIndex)的第二个参数fromIndex是开始搜索的起始位置:当你从位置n开始搜索时,indexOf会从str[n]开始往后找匹配的字符,包括str[n]本身。

两种情况的执行流程对比

  1. 正常情况(pos初始-1,每次+1):

    • 第一次循环:pos+1是0,从位置0开始找"o",找到位置4,pos赋值为4,输出4。
    • 第二次循环:pos+1是5,从位置5开始找"o",找到位置7,pos赋值为7,输出7。
    • 第三次循环:pos+1是8,从位置8开始往后找,再也找不到"o",pos赋值为-1,循环结束。
  2. 出问题的情况(pos初始0,无+1):

    • 第一次循环:从位置0开始找"o",找到位置4,pos赋值为4,输出4。
    • 第二次循环:从位置4开始找"o"——而str[4]本身就是"o",所以indexOf直接返回4,pos还是4,输出4。
    • 后续循环重复这个过程:每次都从位置4开始找,每次都返回4,pos永远不等于-1,循环无限执行,一直输出4。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:50:43