1. 程式人生 > 資訊 >Steam 開放世界特賣今日開啟:《賽博朋克 2077》等海量 3A 大作打折促銷

Steam 開放世界特賣今日開啟:《賽博朋克 2077》等海量 3A 大作打折促銷

        function deepCopy(obj) {
            // 判斷是否是date
            if (obj.constructor === Date) return new Date(obj)
            //判斷是否是RegExp
            if (obj.constructor === RegExp) return new RegExp(obj)

            //如果是基本型別資料直接返回
            if (obj instanceof Object === false) {
                return obj
            }
            //判斷陣列還是物件
            const result = Array.isArray(obj) ? [] : {}
           //遍歷物件中所有的屬性
            for (let key of Reflect.ownKeys(obj)) {
                //確認物件的自有屬性,而不是繼承而來的
                if (obj.hasOwnProperty(key)) {
                    if (typeof obj[key] === 'object') {
                        result[key] = deepCopy(obj[key])
                    } else {
                        result[key] = obj[key]
                    }

                }
            }
            return result
        }
        const obj = {
            reg: new RegExp('/我是一個正則/ig'),
            name: 'lucy', age: 11,
            func: function () { console.log('我是一個函式') },
            date: new Date(0),
            [Symbol('1')]: 1,
            obj: { name: '我是一個物件', id: 1 },
            str: '',
            boolean: true,
            unf: undefined,
            arr: [0, 1, 2]
        }
        let obj1 = deepCopy(obj);
        obj1.arr.push(1)//不會改變obj中的陣列
        console.log(obj1.arr, obj.arr)//[0,1,2,1],[0,1,2]