Frontender Magazine

Новая возможность языка в ES2016: Array.prototype.includes

Array.prototype.includes — это новая возможность ECMAScript, предложенная Домиником Дениколой (Domenic Denicola) и Риком Валдроном (Rick Waldron). Она находится на четвертой стадии процесса формирования релизов, то есть готова и является частью стандарта ECMAScript 2016.

includes — новый метод Array

includes — новый метод Array. Его сигнатура:

Array.prototype.includes(value : any) : boolean

Метод возвращает true, если массив содержит value, в противном случае — false:

> ['a', 'b', 'c'].includes('a')
true

> ['a', 'b', 'c'].includes('d')
false

includes подобен indexOf, следующие два выражения практически эквивалентны друг другу:

arr.includes(x)
arr.indexOf(x) >= 0

Основное отличие заключается в том, что includes() находит NaN, в то время как indexOf() — нет:

> [NaN].includes(NaN)
true

> [NaN].indexOf(NaN)
-1

includes не отличает +0 от -0 (что абсолютно нормально для JavaScript):

> [-0].includes(+0)
true

У типизированных массивов тоже есть метод includes():

let tarr = Uint8Array.of(12, 5, 3);
console.log(tarr.includes(5)); // true

Часто задаваемые вопросы

Материалы для дальнейшего изучения

Если вы заметили ошибку, вы всегда можете отредактировать статью, создать issue или просто написать об этом Антону Немцеву в skype ravencry.

Axel Rauschmayer
Автор:
Axel Rauschmayer
GitHub:
rauschma
Twitter:
@rauschma
Сaйт:
http://rauschma.de/
Email:
axel@rauschma.de
Антон Немцев
Переводчик:
Антон Немцев
Сaйт:
http://frontender.info/
Twitter:
@silentimp
GitHub:
SilentImp
Skype:
ravencry

Комментарии (2 комментария, если быть точным)

Автар пользователя
Alinaki

Почему метод называется includes а не contains? Изначально так и планировалось, но обнаружили, что в результате ломается код, который уже есть в сети (MooTools добавляет метод contains в Array.prototype).

Постмодернизм, простите.

Автар пользователя
subzey

@Alinaki, видимо, не хотят повторения истории с Element.prototype.getElementsByClassName