🐙

Array.prototype.includes を 解読する

2023/09/04に公開

参考URL

https://tc39.es/ecma262/multipage/indexed-collections.html#sec-array.prototype.includes

ざっくり翻訳

自分ように読み解いてみた(完全なメモ書きレベルなのでご了承ください...)

  1. includesする対象がObjectかどうかを確認
  2. Objectのなバサ(len)を確認
  3. もし長さが0ならfalse
  4. 【開始位置検証】 開始位置(n)を確認するためにformIndex(第2引数)を確認
    5. 数値かInfinityを検証(Infinityはグローバル変数)
  5. formIndexundefinedなら開始位置(n)は0とする
  6. 【開始位置検証】で検証した値が+Infinityなら結果はfalse
  7. 【開始位置検証】で検証した値が-Infinityなら開始位置(n)を0とする
  8. いずれにも該当しなければ、検証位置(k)にObjectの長さ(len)+ 開始位置(n)をセット
    10. もし検証位置(k)が0未満であれば、検証位置(k)に0をセット
  9. 【ループ】 検証位置(k) < Objectの長さ(len)
    12. elementKにObjectの検証位置(k)の値をセット
    13. 検証値(searchElement)とelementKが一致すれば 結果はtrue
    14. 一致しなければ検証位置(k)を+1して再ループ

感想

内部でループが発生しているということを理解した上で使用しましょう(戒め)

Discussion