JSFiddle - React, Tailwind, and code Playground

JavaScript

var deepClone = function (obj) {
    try {
        var names = Object.getOwnPropertyNames(obj);
    } catch (e) {
        if (e.message.indexOf("not an object") > -1) {
            // is not object
            return obj;
        }    
    }
    var proto = Object.getPrototypeOf(obj);
    var clone = Object.create(proto);
    names.forEach(function (name) {
        var pd = Object.getOwnPropertyDescriptor(obj, name);
        if (pd.value) {
            pd.value = deepClone(pd.value);
        }
        Object.defineProperty(clone, name, pd);
    });
    return clone;
};

var arr = [1,2,3];
obj = { bar: { foo: 42 } };

console.log(deepClone(42));
console.log(deepClone("foobar"));
console.log(deepClone(true));
console.log(carr = deepClone(arr));
console.log(cobj = deepClone(obj));

cobj.bar.foo = 0;
console.log(obj.bar.foo === 42);

carr[3] = 4;
console.log(carr.length === 4);