Array.prototype.includes
この章では、ドメニック・デニコラとリック・ウォルドロンによる「Array.prototype.includes
」という ECMAScript 2016 の機能について説明します。
> ['a', 'b', 'c'].includes('a')
true
> ['a', 'b', 'c'].includes('d')
false
includes
配列メソッド includes
は次のシグネチャを持っています。
Array
.
prototype
.
includes
(
value
:
any
)
:
boolean
value
がレシーバー(this
)の要素の場合に true
を返し、そうでない場合は false
を返します。
> ['a', 'b', 'c'].includes('a')
true
> ['a', 'b', 'c'].includes('d')
false
includes
は indexOf
に似ていますが、次の 2 つの式はほぼ同等です。
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
Typed 配列にも includes()
メソッドがあります。
let
tarr
=
Uint8Array
.
of
(
12
,
5
,
3
);
console
.
log
(
tarr
.
includes
(
5
));
// true
includes
と呼ばれ、contains
と呼ばれないのですか?includes
と呼ばれ、has
と呼ばれないのですか?has
はキー(Map.prototype.has
)に使用され、includes
は要素(String.prototype.includes
)に使用されます。Set の要素はキーと値の両方とみなすことができるため、Set.prototype.has
が(includes
がない)理由があります。String.prototype.includes
は文字ではなく文字列で動作します。Array.prototype.includes
に関してはこれは矛盾しないのですか?includes
が文字列 includes
とまったく同じように動作する場合、単一要素ではなく配列を受け入れます。しかし、2 つの includes
は indexOf
の例に従います。文字は特別なケースとして扱われ、任意の長さの文字列は一般的なケースとして扱われます。Array.prototype.includes
(ドメニック・デニコラ、リック・ウォルドロン)