为什么 indexOf 在按原样使用与将其与 -1 进行比较时工作不同?

New*_*his 3 javascript indexof

似乎无法找到答案,可能是因为我缺乏谷歌搜索经验,而且 indexOf 的 mozilla 页面似乎没有回答

//this returns -1 because it can't find 'ca' within cat
var randomArr = ['dog', 'cat', 'bird', 'cheetah'];
console.log(randomArr.indexOf('ca'));

//this returns 1 which is correct, but why?
var randomArr = ['dog', 'cat', 'bird', 'cheetah'];
for (var i = 0; i < randomArr.length; i++) {
  if (randomArr[i].indexOf('ca') !== -1) {
    console.log(i);
  }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在使用 indexOf 时这会有所不同。为什么在一种情况下需要精确的字符串匹配,而在另一种情况下不需要?

Cer*_*nce 5

在第一种情况下,您调用.indexOf的是array。这将返回传递参数的精确匹配的索引(如果未找到,则返回-1)。

但是当你这样做时

randomArr[i].indexOf('ca') !== -1
Run Code Online (Sandbox Code Playgroud)

的每一项randomArr都是一个字符串,所以randomArr[i]也是一个字符串。调用randomArr[i].indexOfinvokes String.prototype.indexOf,它返回正在搜索的字符串中子字符串的索引(如果未找到,则返回 -1)。

由于'cat'has'ca'作为子字符串,因此返回cin的索引cat(即 0)。

这些方法具有相同的名称,但它们非常不同。