为什么按原样使用indexOf并将其与-1进行比较?

问题描述 投票:4回答:1

[似乎由于我缺乏谷歌搜索经验而无法找到答案,并且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);
  }
}

我不知道为什么在使用indexOf时这会有所不同。为什么在一种情况下需要完全匹配的字符串,而在另一种情况下却不需要呢?

javascript indexof
1个回答
5
投票

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

但是当您这样做时>

randomArr[i].indexOf('ca') !== -1

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

由于'cat'具有'ca'作为子字符串,所以返回ccat的索引(为0)。

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


-1
投票

indexOf为字符串工作,我的意思是单个数据。它不适用于数组。

© www.soinside.com 2019 - 2024. All rights reserved.