Хотя объекты jQuery действуют как массивы, они на самом деле только array-like объектов. Объект, подобный массиву, представляет собой объект с использованием цифровых клавиш и имеющий свойство length
- это минимум, необходимый для совместимости с native array methods.
Поскольку объекты JQuery только массив типа, а не фактические объекты Array
, родные операции массива (как indexOf
или reverse
) не может быть вызван непосредственно. Вы можете использовать Array.prototype
, или расширить функциональность jQuery.
$('div').reverse(); // TypeError: $("div").reverse is not a function
// we can use Array.prototype though
Array.prototype.reverse.apply($('div'));
// or we can extend jQuery very easily
$.fn.reverse = Array.prototype.reverse;
$('div').reverse(); // now it works!
Вы правильно в своем предположении, что Firebug не содержит каких-либо специальных кожухотрубные для форматирования объектов JQuery. Быстрый поиск показывает a relevant post в списке рассылки Firebug. Предполагая, что информация по-прежнему правильная (сообщение с января) Firebug будет форматировать объект как массив, если он имеет конечной длины и splice
метод.
JQuery выполняет оба этих критерия, но their implementation of splice
является не чем иным, как прямой копией родного метода Array
. Он недокументирован, что означает, что он либо предназначен только для внутреннего использования, либо, возможно, добавлен исключительно для цели использования Firebug в форматировании объектов jQuery.
Что заставляет вас поверить, что это не просто объекты с цифровыми клавишами? – Marius
С одной стороны, Firebug отображает объекты jQuery как массивы, но не такие созданные вручную объекты - и я сомневаюсь, что у него есть специальная обработка для jQuery. – AnC