【面试】04_深拷贝
作者:互联网
JSON.stringify
首先要知道 JSON.parse(JSON.stringify(obj))
的问题
// USNFC
// undefined、Symbol、no enumerable、function、circular reference...
const o = {
a: undefined,
b: Symbol('ifer'),
c: function () { },
};
Object.defineProperty(o, 'e', {
value: 18,
enumerable: false
});
console.log(JSON.stringify(o));
实现深拷贝
function deepClone(obj, hash = new WeakMap()) {
if(obj === null) return obj;
if(obj instanceof Date) return new Date(obj);
if(obj instanceof RegExp) return new RegExp(obj);
// 函数或普通值,不需要拷贝
if(typeof obj !== 'object') return obj;
// #1
if(hash.get(obj)) return hash.get(obj);
// #2
let cloneObj = new obj.constructor(); // Maybe Object
// #3
hash.set(obj, cloneObj);
for(let key in obj) {
if(obj.hasOwnProperty(key)) {
// #4 重点,cloneObj 和 hash
cloneObj[key] = deepClone(obj[key], hash);
}
}
return cloneObj;
}
标签:return,04,cloneObj,面试,JSON,new,obj,拷贝,hash 来源: https://blog.csdn.net/dangpugui/article/details/114643744