JavaScript 拷贝

124 阅读1分钟
  • 浅拷贝
function clone(origin, target){
    var target = target || {}
    for(var prop in origin){
        target[prop] = origin[prop]
    }
    return target
}

var obj = { a: 1, b: 2 }
var obj1 = {}
clone(obj1, obj)
  • 深拷贝
    1. 判断是否是原始值,原始值直接拷贝
    2. 判断是否是对象还是数组
    3. 建立相等的数组或者对象
function deepClone(origin, target) {
    var target = target || {},
        toStr = Object.prototype.toString,
        arrStr = "[object Array]"
    for(var prop in origin) {
        if( origin.hasOwnProtoperty(prop) ){
            if( origin[prop] !== 'null' && typeof (origin[prop]) == 'Object'){
                if( toStr.call(origin[prop]) === arrStr ){
                    target[prop] = []
                } else {
                    target[prop] = {}
                }
                deepClone(origin[prop], target[prop])
            } else {
                target[prop] = origin[prop]
            }
        }
    }
    return target
}