Ответ 1
Поскольку он не является частью jQuery (официально), но является проксированным Array.sort.
Как указывает Дерек, jQuery(...)
не возвращает массив. Скорее, jQuery добавляет прокси, чтобы объект jQuery "действовал как массив":
// For internal use only.
// Behaves like an Array method, not like a jQuery method.
push: push,
sort: [].sort, // <-- here
splice: [].splice
Этот прокси работает, потому что this
в функции определяется объектом, на который была вызвана функция. И, кроме того, Array.sort
(и Array.splice
) работают с любым this
, который является "подобным массиву" (имеет length
и предположительно свойства 0..length-1
). Ниже приведен пример пользовательского объекта [ab] с помощью Array.sort
:
var a = {0: "z", 1: "a", length: 2, sort: [].sort}
a[0] // -> "z"
a.sort() // in-place modification, this === a
a[0] // -> "a"
a instanceof Array // -> false (never was, never will be Array)
YMMV в соответствии с примечаниями "Только для внутреннего использования".