.indexOf()
また、.includes()
メソッドを使用して、配列内の要素を検索したり、特定の文字列内の文字/部分文字列を検索したりできます。
配列での使用
(ECMAScript仕様へのリンク)
indexOf
使用して厳密な等価比較のに対し、includes
用途SameValueZeroアルゴリズムを。このため、次の2点が異なります。
Felix Klingが指摘したように、の場合の動作は異なりNaN
ます。
let arr = [NaN];
arr.indexOf(NaN); // returns -1; meaning NaN is not present
arr.includes(NaN); // returns true
- の場合の動作も異なり
undefined
ます。
let arr = [ , , ];
arr.indexOf(undefined); // returns -1; meaning undefined is not present
arr.includes(undefined); // returns true
文字列での使用
(ECMAScript仕様へのリンク)
- RegExpを
indexOf
に渡すと、RegExp は文字列として扱われ、見つかった場合は文字列のインデックスが返されます。ただし、RegExpをincludes
に渡すと、例外がスローされます。
let str = "javascript";
str.indexOf(/\w/); // returns -1 even though the elements match the regex because /\w/ is treated as string
str.includes(/\w/); // throws TypeError: First argument to String.prototype.includes must not be a regular expression
パフォーマンス
以下のよう538ROMEOは指摘し、includes
(非常に小さな)少し遅くなるかもしれビット(それは最初の引数として正規表現をチェックする必要があるため)よりindexOf
しかし、現実には、これは大きな違いを作り、無視できるものではありません。
歴史
String.prototype.includes()
ECMAScript 2015 Array.prototype.includes()
で導入されたのに対し、ECMAScript 2016で導入されました。ブラウザーサポートに関しては、それらを賢く使用してください。
String.prototype.indexOf()
そして、Array.prototype.indexOf()
のECMAScriptのES5版に存在するので、すべてのブラウザでサポートされています。
includes
ブラウザのサポートがはるかに悪い。