Выбор ответа Middle Современный синтаксис обновлено

Array.prototype.with за границей массива

Вопрос

Что произойдёт?

const arr = [1, 2, 3];
const next = arr.with(5, 0);

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Бросит RangeError. with(index, value) возвращает копию массива с заменой одного элемента и никогда не мутирует исходный.

Варианты ответа

  1. next будет [1, 2, 3, <2 пустых слота>, 0]
  2. next будет [1, 2, 3], ничего не изменится
  3. Бросит RangeErrorправильный ответ
  4. arr изменится, next будет undefined

Разбор

with(index, value) возвращает копию массива с заменой одного элемента и никогда не мутирует исходный. В отличие от присваивания arr[5] = 0, которое расширило бы массив с дырами, with принимает только существующий индекс (отрицательные считаются с конца) и для индекса вне диапазона бросает RangeError. Тихо вернуть копию без изменений он тоже не может.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.

Термины по теме