Когда я разрабатываю 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;
}
 
Итак, по существу, мой вопрос: , что определяет, отображает ли консоль объект как массив? Есть ли для этого какое-либо обоснование, или это абсолютно произвольный "если объект имеет эти свойства, он должен быть массивом?" Если да, каковы решающие свойства?
