Array.prototype.includesとArray.prototype.indexOfの違い
Array.prototype.includesとArray.prototype.indexOfの違い:
配列がある要素を含むか判定することはよくありますよね。その時に使われるメソッドとしては表題の二つがあります。
ちなみに私は基本的に
恥ずかしながら
このメソッドを使う時はBooleanを取り出したいことが多いので、その例を使います。
どちらも第二引数にfromIndexを指定することもできます
これは同じ結果ですが、
これはindexOfではundefinedとは異なる扱いを受けるようです。
もちろん
です
NaNはindexOfでは見つけられません。
はじめに
配列がある要素を含むか判定することはよくありますよね。その時に使われるメソッドとしては表題の二つがあります。ちなみに私は基本的に
includes
を使います。だってindexOf
は結果と-1
を比較しないとBooleanが取り出せないし、文字数多いもん。恥ずかしながら
arr.includes('a')
とarr.indexOf('a') !== -1
は微妙に異なることに最近気が付いたので、調べたついでにまとめました。このメソッドを使う時はBooleanを取り出したいことが多いので、その例を使います。
まず使い方
const arr = [1, 2, 3] // indexOfは存在しない場合-1を返す arr.indexOf(1) !== -1 // true arr.includes(1) // true
null
const arr = [null] arr.indexOf(null) !== -1 // true arr.includes(null) // true
undefined
const arr = [undefined] arr.indexOf(undefined) !== -1 // true arr.includes(undefined) // true
const arr = [,] arr.indexOf(undefined) !== -1 // false !!! arr.includes(undefined) // true
a=[,]
とした時にa[0]
はundefined
なのでincludesの挙動が正しい気がします。もちろん
const arr = [] arr.indexOf(undefined) !== -1 // false arr.includes(undefined) // false
NaN
const arr = [NaN] arr.indexOf(NaN) !== -1 // false !!! arr.includes(NaN) // true
まとめ
-
Array.prototype.includes
とArray.prototype.indexOf
の挙動はだいたい同じ -
indexOf
はNaN
と空の要素
を見つけられない
コメント
コメントを投稿