Массив.indexOf()

Метод indexOf() вернет первый индекс (позицию), где можно найти элемент в массиве. Если этот элемент не существует в массиве, он вернет -1 (false).

const myFruits = [ 'banana', 'orange', 'apple', 'grape' ]
console.log( myFruits.indexOf( 'orange' ) )
//  1
console.log( myFruits.indexOf( 'durian' ) )
// -1
if ( myFruits.indexOf( 'apple' ) ) {
  // do something only if apple exists in array
  // if it doesn't exist,
  // a false flag will cause this portion to not run
}

Несмотря на то, что это старый метод, я по-прежнему предпочитаю его для поиска предметов, потому что он может не только сказать вам, существует ли предмет, но и где он находится. Не говоря уже о том, что он хорошо поддерживается во всех современных браузерах, а также в IE9 и выше.

Массив.includes()

Это метод ES6 (относительно новый) для проверки существования элемента в массиве. Он просто вернет истинное или ложное значение.

const myFruits = [ 'banana', 'orange', 'apple', 'grape' ]
console.log( myFruits.includes( 'orange' ) )
//  true
console.log( myFruits.includes( 'durian' ) )
// false
if ( myFruits.includes( 'apple' ) ) {
  // do something only if apple exists in array
  // if it doesn't exist,
  // a false flag will cause this portion to not run
}

Хотя результат и использование очень похожи, есть несколько вещей, которые вы должны отметить. Он возвращает только истину или ложь; он не говорит вам, где находится элемент в массиве, поэтому, если вам нужно что-то сделать с элементом, вам все равно придется вернуться к старому методу Array.indexOf(), чтобы найти элемент. Кроме того, он не поддерживается IE, поэтому, если вам нужно использовать этот метод, вам придется либо использовать полифилл, либо не поддерживать пользователей IE.