jquery ajax: caching repetive conversions/checks for settings.type in $.ajax.
[jquery.git] / src / core.js
index a0533b1..fedd292 100644 (file)
@@ -579,8 +579,11 @@ jQuery.extend = jQuery.fn.extend = function() {
                                        continue;
 
                                // Recurse if we're merging object values
-                               if ( deep && copy && typeof copy == "object" && src && !copy.nodeType )
-                                       target[ name ] = jQuery.extend( deep, src, copy );
+                               if ( deep && copy && typeof copy == "object" && !copy.nodeType )
+                                       target[ name ] = jQuery.extend( deep, 
+                                               // Never move original objects, clone them
+                                               src || ( copy.length != null ? [ ] : { } )
+                                       , copy );
 
                                // Don't bring in undefined values
                                else if ( copy !== undefined )
@@ -612,7 +615,7 @@ jQuery.extend({
        // See test/unit/core.js for details concerning this function.
        isFunction: function( fn ) {
                return !!fn && typeof fn != "string" && !fn.nodeName &&
-                       fn.constructor != Array && /function/i.test( fn + "" );
+                       fn.constructor != Array && /^[\s[]?function/.test( fn + "" );
        },
 
        // check if an element is in a (or is an) XML document
@@ -1146,17 +1149,17 @@ jQuery.extend({
        merge: function( first, second ) {
                // We have to loop this way because IE & Opera overwrite the length
                // expando of getElementsByTagName
-               var i = 0;
+               var i = 0, elem, pos = first.length;
                // Also, we need to make sure that the correct elements are being returned
                // (IE returns comment nodes in a '*' query)
                if ( jQuery.browser.msie ) {
-                       for ( ; second[ i ]; i++ )
-                               if ( second[ i ].nodeType != 8 )
-                                       first.push( second[ i ] );
+                       while ( elem = second[ i++ ] )
+                               if ( elem.nodeType != 8 )
+                                       first[ pos++ ] = elem;
 
                } else
-                       for ( ; second[ i ]; i++ )
-                               first.push( second[ i ] );
+                       while ( elem = second[ i++ ] )
+                               first[ pos++ ] = elem;
 
                return first;
        },
@@ -1356,3 +1359,8 @@ jQuery.each([ "Height", "Width" ], function(i, name){
                                        this.css( type, size.constructor == String ? size : size + "px" );
        };
 });
+
+// Helper function used by the dimensions and offset modules
+function num(elem, prop) {
+       return elem[0] && parseInt( jQuery.curCSS(elem[0], prop, true), 10 ) || 0;
+}
\ No newline at end of file