js 深拷贝
对于深拷贝 一直使用的都是 JSON 和 lodash 的方法, 今天空下来自己手写个 深拷贝方法, 把想到的一些情况, 包括对 函数、Symbol、正则、日期对象 都做了处理。 基本上满足了了日常需求。代码如下:
// 深拷贝
function deepClone(arg) {
let typeIncludes = ['string', 'boolean', 'number', 'undefined'] // 基础类型
let redundanceIncludes = ['null', 'symbol', 'function', 'regexp', 'date'] // 冗余类型
let typeObject = (obj) => Object.prototype.toString.call(obj).slice(8, -1).toLowerCase()
function dealArray(item) {
let arr = item.map( i => {
return deepClone(i)
} )
return arr
}
function dealObject(obj) {
let newObj = {}
for (const key in obj) {
newObj[key] = deepClone(obj[key])
}
return newObj
}
if(typeIncludes.includes(typeObject(arg)) || redundanceIncludes.includes(typeObject(arg)) ) return arg
return typeObject(arg) === 'array' ? dealArray(arg) : dealObject(arg)
}
有不足的地方, 还请评论区留言😄😀