Test case details

Preparation Code

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
var oldObject = {       a: 1,       b: 2,       c: 3,       d: 4,       e: 5,       f: function() {         return 6;       },       g: [7, 8, 9]     };         var oldArray = [1, 2, 3, 4, 5,       function() {         return 6;       },       [7, 8, 9]     ];             function clone(obj) {       var target = {};       for (var i in obj) {         if (obj.hasOwnProperty(i)) {           target[i] = obj[i];         }       }       return target;     }         Object.defineProperties(Object, {       'extend': {         'configurable': true,         'enumerable': false,         'value': function extend(what, wit) {           var extObj, witKeys = Object.keys(wit);               extObj = Object.keys(what).length ? Object.clone(what) : {};               witKeys.forEach(function(key) {             Object.defineProperty(extObj, key, Object.getOwnPropertyDescriptor(wit, key));           });               return extObj;         },         'writable': true       },       'clone': {         'configurable': true,         'enumerable': false,         'value': function clone(obj) {           return Object.extend({}, obj);         },         'writable': true       }     });         function deepClone(object) {       if (object === null || !(object instanceof Object)) {         return object;       }           var clone, ctor = object.constructor;       switch (ctor) {         case RegExp:           clone = new ctor(object);           break;         case Date:           clone = new ctor(object.getTime());           break;         default:           clone = new ctor();       }       var prop;       for (prop in object) {         clone[prop] = deepClone(object[prop]);       }       return clone;     };

Test cases

Test #1

var newObject = jQuery.extend(true, {}, oldObject);

Test #2

var newObject = JSON.parse(JSON.stringify(oldObject));

Test #3

var newObject = jQuery.extend({}, oldObject);

Test #4

var newObject = clone(oldObject);

Test #5

var newObject = Object.clone(oldObject);

Test #6

var newObject = eval("(" + JSON.stringify(oldObject) + ")");

Test #7

var newArray = jQuery.extend([], oldArray);

Test #8

var newObject = deepClone(oldObject);