简单实现一个深拷贝的函数
实现
function deepClone(origin){
var isObject = any => typeof any == 'object' && any != null
var isArray = any => Object.prototype.toString.call(any) === '[object Array]'
if(!isObject(origin)) return origin
var target = isArray(origin) ? [] : {}
for (var prop in origin) {
if (origin.hasOwnProperty(prop)) {
var value = origin[prop]
if(isObject(value)){
target[prop] = deepClone(value)
}else{
target[prop] = value
}
//if...else...可换成三目运算符
//target[prop] = isObject(value) ? deepClone(value) : value
}
}
return target
}
思路
1. 对传入的参数做判断,若不是引用数据类型,则return
2. 判断参数是数组或对象,对 target 初始化赋值,target 用于存放克隆的值
3. 遍历origin,若为引用数据类型使用递归克隆,否则直接对tagret 赋值
4. 最后将target返回出去
最后
经过测试,暂时没发现什么问题。
本来想全部用es5来实现的,但是箭头函数真香啊,看起来都舒服很多,嘿嘿~
如果有可以优化或存在的问题,请告诉我 ~