Test case details

Preparation Code

<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
var oldObject = {       date: new Date(),       func: function(q) {         return 1 + q;       },       num: 123,       text: "asdasd",       array: [1, "asd"],       regex: new RegExp(/aaa/i),       subobj: {         num: 234,         text: "asdsaD"       }     }               function clone(obj) {         var copy;             // Handle the 3 simple types, and null or undefined         if (null == obj || "object" != typeof obj) return obj;             // Handle Date         if (obj instanceof Date) {           copy = new Date();           copy.setTime(obj.getTime());           return copy;         }             // Handle Array         if (obj instanceof Array) {           copy = [];           for (var i = 0, len = obj.length; i < len; i++) {             copy[i] = clone(obj[i]);           }           return copy;         }             // Handle Object         if (obj instanceof Object) {           copy = {};           for (var attr in obj) {             if (obj.hasOwnProperty(attr)) copy[attr] = clone(obj[attr]);           }           return copy;         }             throw new Error("Unable to copy obj! Its type isn't supported.");       }

Test cases

Test #1

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

Test #2

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

Test #3

var newObject = clone(oldObject);

Test #4

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