Porque no es parte de jQuery (oficialmente), pero es un proxy Array.sort.
Como señala Derek, jQuery(...)
no devuelve una matriz. Más bien, jQuery adds a proxy para hacer que el objeto "actuar como una matriz" jQuery:
// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
sort: [].sort, // <-- here
splice: [].splice
Este proxy funciona porque el this
en una función está determinada por el objeto en el que se invoca la función. Y, además, Array.sort
(y Array.splice
) funcionan en cualquier this
que sea "tipo array" (tiene un length
y presumiblemente propiedades 0..length-1
). Aquí es un ejemplo de un objeto personalizado [ab] utilizando 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 siguiente los "sólo para uso interno" notas.
'$ ('# myId')' no devuelve una matriz. –
¿Eso significa que no necesito hacer un .toArray() debido a este proxy? – foreyez
@foreyez: No. 'sort()' devolverá 'this',' push() 'la longitud y' splice() 'new' Array'. – Bergi