JavaScriptのArrayを間違えてMap-likeに使うと爆発する
Try
おそらく数秒ブラウザがフリーズするので注意
code:js
const array = [];
array.forEach((element) => console.log(element));
何が起こっているのか
code:js
const array = [];
console.log(array.length); // => 0
console.log(array.length); // => 1000000001
Arrayオブジェクトのインデックスに数値を渡すと、その数値までlengthが伸びる。
当然、列挙はインデックス0から最後の要素まで順番に反復するので 1e9 の長さを持つ配列は 1e9 回反復される。そして、ブラウザの実装によると思うが、Chromeでは配列の長さが 1e9 を超えたくらいから forEach メソッドや for 文が急激に遅くなる。おそらくJITコンパイルが不可能になるしきい値がどこかにあるのだと思う(要出典)。
どうすればいいのか
配列ではなくオブジェクトを使いましょう。