},
merge: function( first, second ) {
- var pos, i = second.length;
+ var i = first.length, j = 0;
- // We have to get length this way when IE & Opera overwrite the length
- // expando of getElementsByTagName
- if ( i && i.nodeType ) {
- for ( i = 0; second[i]; ++i ) {}
- }
-
- pos = i + first.length;
-
- // Correct length for non Arrays
- first.length = pos;
-
- while ( i ) {
- first[ --pos ] = second[ --i ];
+ if ( typeof second.length === "number" ) {
+ for ( var l = second.length; j < l; j++ ) {
+ first[ i++ ] = second[ j ];
+ }
+ } else {
+ while ( second[j] !== undefined ) {
+ first[ i++ ] = second[ j++ ];
+ }
}
+ first.length = i;
+
return first;
},
});
test("jQuery.makeArray", function(){
- expect(15);
+ expect(17);
equals( jQuery.makeArray(jQuery('html>*'))[0].nodeName.toUpperCase(), "HEAD", "Pass makeArray a jQuery object" );
equals( jQuery.makeArray(/a/)[0].constructor, RegExp, "Pass makeArray a regex" );
ok( jQuery.makeArray(document.getElementById('form')).length >= 13, "Pass makeArray a form (treat as elements)" );
+
+ // For #5610
+ same( jQuery.makeArray({'length': '0'}), [], "Make sure object is coerced properly.");
+ same( jQuery.makeArray({'length': '5'}), [], "Make sure object is coerced properly.");
});
test("jQuery.isEmptyObject", function(){