{"ScriptPreparationCode":"var MyObject = {\r\n description: \u0027Creates a deep copy of source, which should be an object or an array.\u0027,\r\n myNumber: 123456789,\r\n myBoolean: true,\r\n jayson: {\r\n stringify: \u0027JSON.stringify() method converts a JavaScript value to a JSON string....\u0027,\r\n parse: \u0027JSON.parse() method parses a JSON string...\u0027\r\n }\r\n};\r\n\r\nfunction deepFreeze(object) {\r\n for (const v of Array.isArray(object) ? object : Object.values(object)) {\r\n if (v \u0026\u0026 typeof v === \u0027object\u0027) {\r\n deepFreeze(v);\r\n }\r\n }\r\n Object.freeze(object);\r\n return object;\r\n}\r\n\r\nfunction deepClone(object) {\r\n if (Array.isArray(object)) {\r\n const len = object.length;\r\n const result = new Array(len);\r\n for (let i = 0; i \u003C len; \u002B\u002Bi) {\r\n const v = object[i];\r\n result[i] = v \u0026\u0026 typeof v === \u0027object\u0027 ? deepClone(v) : v;\r\n }\r\n return result;\r\n } else {\r\n const result = {};\r\n for (const k in object) {\r\n const v = object[k];\r\n result[k] = v \u0026\u0026 typeof v === \u0027object\u0027 ? deepClone(v) : v;\r\n }\r\n return result;\r\n }\r\n}\r\nfunction deepCloneSafe(object) {\r\n if (!object) {\r\n return object;\r\n }\r\n if (typeof object !== \u0027object\u0027) {\r\n // this is not an array or an object, it\u0027s a primitive...\r\n // having a type system doesn\u0027t 100% prevent this...\r\n return object;\r\n }\r\n // also.. hopefully nobody ever uses \u0060new String(\u0027a\u0027)\u0060 or \u0060new Number(1)\u0060\r\n // but protect against that edge case anyways..\r\n if (typeof object.valueOf() !== \u0027object\u0027) {\r\n return new (object.constructor)(object.valueOf());\r\n }\r\n if (Array.isArray(object)) {\r\n const len = object.length;\r\n const result = new Array(len);\r\n for (let i = 0; i \u003C len; \u002B\u002Bi) {\r\n const v = object[i];\r\n result[i] = v \u0026\u0026 typeof v === \u0027object\u0027 ? deepClone(v) : v;\r\n }\r\n return result;\r\n } else {\r\n const result = {};\r\n for (const k in object) {\r\n const v = object[k];\r\n result[k] = v \u0026\u0026 typeof v === \u0027object\u0027 ? deepClone(v) : v;\r\n }\r\n return result;\r\n }\r\n}\r\n\r\nvar myCopy = null;\r\n","TestCases":[{"Name":"Lodash cloneDeep","Code":"myCopy = _.cloneDeep(MyObject);","IsDeferred":false},{"Name":"Json clone","Code":"myCopy = JSON.parse(JSON.stringify(MyObject));","IsDeferred":false},{"Name":"freeze and destructure","Code":"Object.freeze(MyObject); myCopy = { ...MyObject };","IsDeferred":false},{"Name":"deepClone","Code":"myCopy = deepClone(MyObject)","IsDeferred":false},{"Name":"deepFreeze","Code":"deepFreeze(MyObject); myCopy = MyObject","IsDeferred":false},{"Name":"deepCloneSafe","Code":"myCopy = deepCloneSafe(MyObject)","IsDeferred":false}]}