堆与栈 | 对象深浅拷贝

122 阅读1分钟

JS中的变量类型分为

值类型(基本类型):null undefined boolean string number

引用类型: array object 在JS中,每一个数据都需要一个内存空间。内存空间又被分为两种,栈内存(stack)与堆内存(heap)。

  • 1 栈内存一般储存基础数据类型
    var a = 1
    数据在栈内存中的存储与使用方式类似于数据结构中的堆栈数据结构,遵循后进先出的原则。

  • 2 堆内存一般储存引用数据类型
    var b = { xi : 20 }
    浅拷贝
    浅拷贝就是只进行一层拷贝

function shallowClone(source) {
    var target = {};
    for (var i in source) {
        if (source.hasOwnProperty(i)) {
            target[i] = source[i];
        }
    }
    return target;
}

深拷贝
无限层级拷贝
json的深拷贝

function cloneJSON(source) {
    return JSON.parse(JSON.stringify(source));
}

深拷贝 = 浅拷贝 + 递归
弊端:对对象中的正则,func等没有做处理

function clone(source) {
    var target = {};
    for(var i in source) {
        if (source.hasOwnProperty(i)) {
            if (typeof source[i] === 'object') {
                target[i] = clone(source[i]); // 注意这里
            } else {
                target[i] = source[i];
            }
        }
    }
    return target;
}