// Save a reference to some core methods
toString = Object.prototype.toString,
+ hasOwnProperty = Object.prototype.hasOwnProperty,
push = Array.prototype.push,
slice = Array.prototype.slice,
indexOf = Array.prototype.indexOf;
clone = src;
} else if ( jQuery.isArray(copy) ) {
clone = [];
- } else if ( jQuery.isObject(copy) ) {
+ } else if ( jQuery.isObjectLiteral(copy) ) {
clone = {};
} else {
clone = copy;
return toString.call(obj) === "[object Array]";
},
- isObject: function( obj ) {
- return this.constructor.call(obj) === Object;
+ isObjectLiteral: function( obj ) {
+ if ( toString.call(obj) !== "[object Object]" ) {
+ return false;
+ }
+
+ //own properties are iterated firstly,
+ //so to speed up, we can test last one if it is own or not
+
+ var key;
+ for ( key in obj ) {}
+
+ return !key || hasOwnProperty.call( obj, key );
},
isEmptyObject: function( obj ) {