Test case details

Preparation Code

<script src="https://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        }       });

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);