Отрицательные индексы

Что не так?

let arr = [];
arr[-1] = 'foo'; // В массив записывается элемент с отрицательным индексом
arr; // [] — после этого массив выглядит пустым
arr[-1]; // foo — но это не так

В массив можно записать элемент с отрицательным индексом. При этом его не видно при вызове массива. Но он есть. Как суслик.

… Видишь суслика?
— Нет.
— И я не вижу. А он есть!
© прапорщик Казаков, фильм «ДМБ»

Почему так?

Несмотря на то, что индекс — это число, записывать элементы массива можно только по натуральным индексам. Попытка записать элемент на какой-либо другой индекс (например, объект, дробное число или отрицательное число) вызовёт преобразование индекса к строке и запись не элемента массива, а свойства массива по ключу.

Поэтому запись проходит успешно, но записывается не элемент, а свойство.

Что же делать?

Молиться, поститься и слушать радио «Радонеж». Да особо ничего. Просто при странных действиях не нужно ожидать адекватных результатов.