Отрицательные индексы
Что не так?
let arr = []; arr[-1] = 'foo'; // В массив записывается элемент с отрицательным индексом arr; // [] — после этого массив выглядит пустым arr[-1]; // foo — но это не так
В массив можно записать элемент с отрицательным индексом. При этом его не видно при вызове массива. Но он есть. Как суслик.
… Видишь суслика? — Нет. — И я не вижу. А он есть!© прапорщик Казаков, фильм «ДМБ»
Почему так?
Несмотря на то, что индекс — это число, записывать элементы массива можно только по натуральным индексам. Попытка записать элемент на какой-либо другой индекс (например, объект, дробное число или отрицательное число) вызовёт преобразование индекса к строке и запись не элемента массива, а свойства массива по ключу.
Поэтому запись проходит успешно, но записывается не элемент, а свойство.
Что же делать?
Молиться, поститься и слушать радио «Радонеж».Да особо ничего. Просто при странных действиях не нужно ожидать адекватных результатов.