@stan288

Почему у Proxy object лишние элементы в массиве?

Есть такой прокси-массив
const historyArr = new Proxy([], {
    get(target, property) {
        return target[property]
    },
    set(target, property, value) {
      if (target.length > 9) {
        target.pop();
      }
      target.unshift(value);
      return true;
    }
  });


63cd7db8c98a5510238164.png
когда добавляю в него элементы, почему-то добавляется длина массива в отдельный индекс.
Почему такое поведение? Мне не нужна длина в массиве, я ведь её не добавляю, откуда она берется и как от этого явления избавиться?
  • Вопрос задан
  • 233 просмотра
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F Куратор тега JavaScript
Как работает метод push, особое внимание на пятый и шестой пункты - устанавливается значение, устанавливается новая длина массива. Поскольку push вы взываете у proxy, а не у оригинального массива, то и при установке значения, и при установке новой длины срабатывает обработчик set.

Как избавиться от такого поведения... Конечно, можно в обработчике set ничего не делать при попытке установить значение length. Правда, так вы тоже получите побочные эффекты, например - невозможность напрямую назначить длину массива; при выполнении pop'а, несмотря на то, что элемент будет удалён, длина массива не изменится и т.п.

Так что стоит подумать - а действительно ли для решения стоящей перед вами задачи надо использовать proxy.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы