JS中的深浅拷贝
浅拷贝:
拷贝前后对象的基本数据类型互补影响,引用数据类型共享同一个堆中的数据,会相互影响。
浅拷贝的实现方式:
- Object.assign()
- …扩展运算符
- Array.prototype.concat
- Array.prototype.slice
深拷贝:
拷贝后会开辟新的内存来存放新的数据,互不影响。
深拷贝的实现方式:
-
JSON.parse(JSON.stringify())
-
var deepClone = function(obj) { let cloneObj = {}; if(typeof obj !== 'object') return obj; if(obj === null) return obj; if(obj instanceof Date) return new Date(obj); if(obj instanceof RegExp) return new RegExp(obj) for(let i in obj) { if(obj.hasOwnProperty(i)) { cloneObj[i] = deepClone(obj[i]); } } return cloneObj }
细节知识:
- Object.assign()
- arr.concat()
- arr.slice()
- typeof与instanceof的区别
- obj.hasOwnProperty()
- JSON.parse()与JSON.stringify()