Skip to content

Latest commit

 

History

History
41 lines (40 loc) · 890 Bytes

JS-实现深拷贝和浅拷贝.md

File metadata and controls

41 lines (40 loc) · 890 Bytes

浅拷贝

function shallowCopy(obj) {
    if (typeof(obj) !== 'object') {
        return obj;
    }
    let newObj = Array,isArray(obj) ? [] : {}
    for(let key in obj) {
        if (obj.hasOwnProperty(key)) {
            newObj[key] = obj[key];
        }
    }
    return newObj;
}
需要注意的是,数组和对象都可以使用 for in 遍历

深拷贝

function deepCopy(obj) {
    if (typeof(obj) !== 'object') {
        return obj;
    }
    let newObj = Array.isArray(obj) ? [] : {};
    for(let key in obj) {
        if (obj.hasOwnProperty(key)) {
            if (typeof(obj[key]) === 'object') {
                newObj[key] = deepCopy(obj[key]);
            } else {
                newObj[key] = obj[key];
            }
        }
    }
    return newObj;
}
深拷贝的不同是,当判断属性为对象时,递归调用函数。