Может, так понятнее. Примерно то же:
const arr = [0, 1, 2, 3, 4, 5];
const index = 3;
[ ...arr.slice(0, index), 'Habr', ...arr.slice(index + 1) ]
// [ 0, 1, 2, "Habr", 4, 5 ]
Делается новый массив, в котором сначала идут элементы исходного от
0
до
index
(не включая index);
затем вставляется некий новый элемент;
затем добиваются элементы исходного начиная со следующего после index'ного.
Фактически заменяется элемент под индексом
index
на некий новый. В отличие от метода
splice()
, которым можно было бы сделать тоже самое
arr.splice(index, 1, 'Habr')
, вариант в вопросе не изменяет исходный массив, а создаёт новый – что, в общем-то, «правильно».