Array.prototype.includes
Array.prototype.includes
is an ECMAScript proposal by Domenic Denicola and Rick Waldron. It is at stage 4 (finished) and part of ECMAScript 2016.
includes
The Array method includes
has the following signature:
Array.prototype.includes(value : any) : boolean
It returns true
if value
is an element of its receiver (this
) and false
, otherwise:
> ['a', 'b', 'c'].includes('a')
true
> ['a', 'b', 'c'].includes('d')
false
includes
is similar to indexOf
– the following two expressions are mostly equivalent:
arr.includes(x)
arr.indexOf(x) >= 0
The main difference is that includes()
finds NaN
, whereas indexOf()
doesn’t:
> [NaN].includes(NaN)
true
> [NaN].indexOf(NaN)
-1
includes
does not distinguish between +0
and -0
(which is how almost all of JavaScript works):
> [-0].includes(+0)
true
Typed Arrays will also have a method includes()
:
let tarr = Uint8Array.of(12, 5, 3);
console.log(tarr.includes(5)); // true
Why is the method called includes
and not contains
?
The latter was the initial choice, but that broke code on the web (MooTools adds this method to Array.prototype
).
Why is the method called includes
and not has
?
has
is used for keys (Map.prototype.has
), includes
is used for elements (String.prototype.includes
). The elements of a Set can be viewed as being both keys and values, which is why there is a Set.prototype.has
(and no includes
).
The ES6 method String.prototype.includes
works with strings, not characters. Isn’t that inconsistent w.r.t. Array.prototype.includes
?
If Array includes
worked exactly like string includes
, it would accept arrays, not single elements. But the two includes
follow the example of indexOf
; characters are seen as a special case and strings with arbitrary lengths as the general case.
Array.prototype.includes
(Domenic Denicola, Rick Waldron)