const obj = { a: 100, b: { b1: [1, 2, 3], b2: 'string' }, c: ['a', 'b', 'c'] } /* * 沒做深拷貝的效果 const obj2 = obj obj2.a = 200 obj2.b.b2 = 'abc123' obj2.c[0] = 'aa' console.log(obj) console.log(obj2) obj2修改的內容會影響obj的內容,因為他們修改的都是同一個堆內容 * */ const obj2 = deepClone(obj); obj2.a = 200 obj2.b.b2 = 'abc123' obj2.c[0] = 'aa' console.log(obj) console.log(obj2) /** * 深拷貝 * @param {Object} obj 要深拷貝的物件 * */ function deepClone(obj = {}) { // obj如果不是參考型別,或者是null,直接回傳 if (typeof obj !== 'object' || obj == null) { return obj } // 初始化回傳結果 let result; if (obj instanceof Array) { result = [] } else { result = {} } // 遍歷obj for (let key in obj) { // 保證key不是原型的屬性 if (obj.hasOwnProperty(key)) { // 遞回呼叫 result[key] = deepClone(obj[key]) } } return result }
考點:
不同型別使用記憶體堆疊的情況
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/11185.html
標籤:JavaScript
下一篇:前端面試題整理——原型和原型鏈
