有点混淆这个 javascript 语法 --> arr.indexOf(searchElement[ fromIndex])

A little bit confused with this javascript syntax --> arr.indexOf(searchElement[, fromIndex])

   const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];

console.log(beasts.indexOf('bison'));
// expected output: 1

// start from index 2
console.log(beasts.indexOf('bison', 2));
// expected output: 4

console.log(beasts.indexOf('giraffe'));
// expected output: -1

我一直在反复看这个js语法。我从 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf 那里得到了这段代码 它说 fromIndex 参数是开始搜索的索引。现在,从上面的代码中,我对 fromIndex 参数的计数是如何发生的感到困惑。来自代码就行:

// start from index 2
console.log(beasts.indexOf('bison', 2));
// expected output: 4

Camel 是索引为 2 的项目。计数如何恰好到达预期输出 4?

当我尝试更改第二个参数时,

// start from index 3
console.log(beasts.indexOf('bison', 3)); 

Duck 是索引为 3 的项目。但是 indexOf('bison', 3) 的输出仍然是 4。

计数是如何发生的?

这里什么都不计算,它只是输出元素所在的索引。

如果您输入 console.log(beasts.indexOf('bison', 3)); ,那么您会从索引 3 开始搜索。您仍然会得到 4,因为 bison 位于索引 4。甚至名称 indexOf 也表明您接收索引。

数组保持不变,只是起点移动到索引 3

const beasts = ['ant', 'bison', 'camel', 'duck', 'bison'];
                                            ^
                                            |
                                            |
                    You start here and search to the right for "bison"

很简单。

第一个元素索引为0:

> console.log(beasts[0])
"ant"
如果你传递第二个参数,

indexOf 将循环你的数组。
换句话说,如果从你传递的索引到它的末尾都没有找到元素,该命令将从头开始寻找它,继续计数。

这里不是算数的问题。这都是关于元素在基于 zero-index 的数组中的位置。

也许您会感到困惑,因为您为同一个词 (bison) 获得了两个索引。别担心。不要忘记这个词在数组中重复了两次。即使不使用 indexOf 你也可以看到它在索引 1 和索引 4.