@Boris009

При использовании методов добавления элементов в массив он под капотом создается заново?

Когда мы делаем пуш или другую вставку, удаление в массив, он под капотом создает новый массив и выводит нам новый в ту же переменную?
Т.е. операции по типу [[...arr], value] так же сработают по скорости и логике, как arr.push(value)?
  • Вопрос задан
  • 58 просмотров
Решения вопроса 2
MrDecoy
@MrDecoy Куратор тега JavaScript
Верставший фронтендер
Т.е. операции по типу [[...arr], value] так же сработают по скорости и логике, как arr.push(value)?

Нет. push быстрее.

А если чуть более детально, то под капотом это выглядит примерно так:
- Вы объявили пустой массив. Движок зарезервировал память на массив из 10ти(разные движки могут под разную длину массива резервировать место) элементов.
- Делаете пуш. Пока элементов меньше чем зарезервировано - всё очень быстро, так как движок просто кладёт элемент в зарезервированную ячейку памяти, адрес которой известен.
- Как только элементов стало больше, под капотом ищется новая доступная область памяти на ещё 10 элементов и далее эти области памяти линкуются между собой (первая + вторая).

В случае же со spread [...array] каждый раз создаётся новый массив, то есть каждый раз происходит поиск доступной памяти на массив + перебор массива для того чтобы заспредить его.

Примерно так.
Ответ написан
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Т.е. операции по типу [[...arr], value] так же сработают по скорости и логике, как arr.push(value)?
Про скорость ответили, скажу про логику: она у этих операций разная. В первом случае создаётся новый массив, во втором изменяется существующий. Это важно, если важна иммутабельность, как, например, в Реакте.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект