const food = { beef: '🥩', bacon: '🥓' } //shallow copy 1.// "Spread" => { ...food } 2.// "Object.assign" => shallow copy Object.assign({}, food) // deep copy when object consists nested objects and arrays 3. // "JSON" => convert to string and parse back JSON.parse(JSON.stringify(food)) // RESULT: // { beef: '🥩', bacon: '🥓' } 4.// deep copy by using iterator function iterationCopy(src) { src = { beef: '🥩', bacon: '🥓' , num:[1,2,3,]} let target = {}; for (let prop in src) { if (src.hasOwnProperty(prop)) { // if the value is a nested object, recursively copy all it's properties if (isObject(src[prop])) { target[prop] = iterationCopy(src[prop]); } else { target[prop] = src[prop]; } } } return target; }