Почему indexOf работает по-разному, когда сравнивает его с -1? - PullRequest
3 голосов
/ 13 февраля 2020

Не могу найти ответ, вероятно, из-за отсутствия опыта поиска в Google, и страница 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. Почему в одном случае требуется точное совпадение строк, а в другом нет?

1 Ответ

5 голосов
/ 13 февраля 2020

В первом случае вы вызываете .indexOf для массива . Это вернет индекс точного соответствия переданного параметра (или -1, если не найден).

Но когда вы сделаете

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

Каждый элемент randomArr - это строка, поэтому randomArr[i] - это строка. Вызов randomArr[i].indexOf вызывает String.prototype.indexOf, который возвращает индекс подстроки в искомой строке (или -1, если не найден).

Поскольку 'cat' имеет 'ca' в качестве подстроки, индекс c в cat возвращается (что равно 0).

Методы имеют одно и то же имя, но они очень разные.

...