Когда я разрабатываю jQuery, я часто нахожу, что набираю селекторов в консоли Chrome/Firebug и вижу, что они мне дают. Они всегда красиво отформатированы, как если бы они были массивами:
Я пытаюсь выяснить, что именно это делает консоль обрабатывать объект как массив. Например, следующий пользовательский объект не рассматривается как массив:
function ElementWrapper(id) {
this[0] = document.getElementById(id);
}
Если я затем добавлю свойство length
и метод splice
, он волшебным образом работает как массив с любыми свойствами с целыми ключами, которые рассматриваются как члены массивов:
function ElementWrapper(id) {
this[0] = document.getElementById(id);
this.length = 1;
this.splice = Array.prototype.splice;
}
Итак, по существу, мой вопрос: , что определяет, отображает ли консоль объект как массив? Есть ли для этого какое-либо обоснование, или это абсолютно произвольный "если объект имеет эти свойства, он должен быть массивом?" Если да, каковы решающие свойства?