Новая возможность языка в 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
Часто задаваемые вопросы
-
Почему метод называется
includes
, а неcontains
?
Изначально так и планировалось, но обнаружили, что в результате ломается код, который уже есть в сети (MooTools добавляет методcontains
вArray.prototype
). -
Почему метод называется
includes
, а неhas
?
has
используется для ключей (Map.prototype.has
),includes
используется для элементов (String.prototype.includes
). ЭлементыSet
можно рассматривать как и то, и другое, поэтому естьSet.prototype.has
(и нетincludes
). -
Метод
String.prototype.includes
из ES6 работает с целыми строками, а не с отдельными буквами. Разве логично, что Array.prototype.includes ищет отдельные элементы?
Если быincludes
массивов работал точно так же, как иincludes
строк, он принимал бы массивы, а не отдельные элементы. Но логика работы обоихincludes
такая же, как у соответствующих методовindexOf
: буквы рассматриваются как частный случай строк с произвольной длиной.
Материалы для дальнейшего изучения
Array.prototype.includes
(разработано Домиником Дениколой и Риком Валдроном)