Дано
Есть массив:
var massiv = [1,2,3,4,5]
Мы хотим удалить первый элемент массива. Тут есть два варианта:
Различие этих двух вариантов в том, что мы — либо изменяем длину массива, либо не изменяем длину массива.
Изначальная длина массива равна пяти:
massiv.length 5

Удаление первого элемента массива без сдвига — без изменения длины массива
В этом случае мы воспользуемся зарезервированным словом delete
и удалим ненужное ЗНАЧЕНИЕ первого ЭЛЕМЕНТА массива. Важный момент. Мы удалим только значение под ИНДЕКСОМ. Сам индекс останется в массиве. В ответ мы будем получать undefined
, когда будем обращаться к первому элементу массива.
Запись будет выглядеть так:
delete massiv[0]
Такое удаление первого элемента будет сохранять длину самого массива.
massiv.length
Нам вернётся 5. Длина не изменится, но появится «дырка» в массиве.

Если сейчас мы обратимся к первому элементу массива, то в ответ мы получим:
massiv[0] undefined
Это значит, что под индексом ноль нет никакого значения. Оно было удалено.
Удаление первого элемента массива со сдвигом — с изменением длины массива
Этот способ подходит в том случае, если мы хотим полностью убрать первый элемент из массива и сдвинуть элементы в оригинальном массиве. Поможет нам в этом метод shift()
.
massiv.shift()
Нам вернётся значение первого элемента массива. Оно нам не нужно, просто так работает сам метод shift()
. После вызова в оригинальном массиве произойдут изменения.

Длина уже будет равна 4, а не 5.
При помощи метода slice() без повреждения оригинала
То есть мы хотим убрать и ЗНАЧЕНИЕ и ИНДЕКС в клонированном массиве. В результате длина массива уменьшится на единицу и в таком массиве не будет «дырок».
В этом нам поможет метод slice()
, который умеет выбирать «кусочки» массива. Он может принимать два параметра: начало и окончание. Если мы передадим только один параметр начала, тогда нам вернутся все оставшиеся элементы до конца массива.
Команда будет выглядеть так:
massiv.slice(1)

В чём тут разница с первым вариантом? Метод slice()
возвращает нам новый массив, не повреждая оригинального массива. То есть мы получаем новый экземпляр класса Array. И потом в новом массиве мы удаляем первый элемент (в клоне удаляем первый элемент, а не в оригинале).

Информационные ссылки
Стандарт ECMAScript — Раздел «13.5.1 The delete Operator» — https://tc39.es/ecma262/#sec-delete-operator