Array.prototype.includes
This chapter describes the ECMAScript 2016 feature “Array.prototype.includes
” by Domenic Denicola and Rick Waldron.
> ['a', 'b', 'c'].includes('a')
true
> ['a', 'b', 'c'].includes('d')
false
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
includes
and not contains
?Array.prototype
).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
).String.prototype.includes
works with strings, not characters. Isn’t that inconsistent w.r.t. Array.prototype.includes
?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)