В этой статье рассмотрим новый метод “Array.prototype.includes” добавленный в ECMAScript 2016
Обзор
> ['Angular', 'TypeScript', 'Node.js'].includes('TypeScript') true
> ['Angular', 'TypeScript', 'Vue.js'].includes('TypeScript') false
Метод для массива includes
Метод includes имеет такую сигнатуру:
Array.prototype.includes(elem : any) : boolean
Он возвращает истина если elem является элементом массива и ложь если в противном случае.
includes похож на метод indexOf — выражение нижа практически идентичны
array.includes(str) array.indexOf(str)>=0
Главным отличием является, то что includes() находит NaN, а indexOf() нет:
let numbers=[1,NaN,3] > numbers.includes(NaN) true > numbers.indexOf(NaN) -1
Кроме того, includes не различает числа +0 и -0
> [0].includes(-0) true
Метод includes также доступен в типизированных массивах
let typedArray=Uint8Array.of(1, 2, 3); console.info(typedArray.includes(4));//false
Интересные факты
Почему метод назвали includes а не contains?
Изначально хотели назвать contains, но это слов уже используеться некоторыми библиотеками.
Почему метод назвали includes а не has?
has используется для ключей (Map.prototype.has), includes используется для элементов. Элементы множества includes могут рассматриваться как ключи и значения, по тому там был добавлен метод Set.prototype.has
ES6 метод String.prototype. includes работает с строками, но не с символами(Symbol). Не противоречит ли это тому как работает Array.prototype.includes?
Если б Array includes работал так де как String includes, как параметр он бы принимал массивы, не элементы.