[似乎由于我缺乏谷歌搜索经验而无法找到答案,并且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时这会有所不同。为什么在一种情况下需要完全匹配的字符串,而在另一种情况下却不需要呢?
在第一种情况下,您是在array上调用.indexOf
。这将返回所传递参数的exact match的索引(如果未找到则为-1)。
但是当您这样做时>
randomArr[i].indexOf('ca') !== -1
randomArr
的每个项目都是一个字符串,所以randomArr[i]
是一个字符串。调用randomArr[i].indexOf
会调用String.prototype.indexOf
,它返回正在搜索的字符串中子字符串的索引(如果未找到则返回-1。)>由于
'cat'
具有'ca'
作为子字符串,所以返回c
中cat
的索引(为0)。
这些方法具有相同的名称,但是它们非常不同。
indexOf为字符串工作,我的意思是单个数据。它不适用于数组。