Хосподи, ну тут вам и написали ахинеи, слов нет.
Начнём с того, что результат вот этого
var b = new Array(1000000);
b.map((_, i) => i * 2); // [empty × 1000000]
Будет пустой массив из 1КК «дырок», а не `[0, 2, 4, ..., 1999998]`
Во-вторых, посмотрите, что делает
array.map и сравните с вашим `for`.
В-третьих, v8, такой v8, что до сих пор не могут выкинуть js-реализацию этих методов и запилить нормульную native-имплементацию.
В-четвертых, создание стрелочной функции не бесплатно.
В-пятых, мекробенчмарки (без контекста) — зло.
P.S. Вот FF молодец:
https://jsbench.github.io/#d498a7c676aa46e17eb9a8e...