• 深浅拷贝


    数组的浅拷贝:

    可以利用数组的一些方法,比如:slice、concat返回一个新数组的特性俩实现拷贝

    var arr = [{old: 'old'}, ['old']];
    
    var new_arr = arr.concat();
    
    arr[0].old = 'new';
    arr[1][0] = 'new';
    
    console.log(arr) // [{old: 'new'}, ['new']]
    console.log(new_arr) // [{old: 'new'}, ['new']]

    使用concat和slice是一种浅拷贝

    数组的深拷贝:

    var arr = ['old', 1, true, ['old1', 'old2'], {old: 1}]
    
    var new_arr = JSON.parse( JSON.stringify(arr) );
    
    console.log(new_arr);

    不仅使用于数组,还适用于对象,但是不能拷贝函数

    浅拷贝的实现:

    var shallowCopy = function(obj) {
        // 只拷贝对象
        if (typeof obj !== 'object') return;
        // 根据obj的类型判断是新建一个数组还是对象
        var newObj = obj instanceof Array ? [] : {};
        // 遍历obj,并且判断是obj的属性才拷贝
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                newObj[key] = obj[key];
            }
        }
        return newObj;

    深拷贝的实现:

    var deepCopy = function(obj) {
        if (typeof obj !== 'object') return;
        var newObj = obj instanceof Array ? [] : {};
        for (var key in obj) {
            if (obj.hasOwnProperty(key)) {
                newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key];
            }
        }
        return newObj;
    }
  • 相关阅读:
    jquery事件优化---事件委托
    2017年7月6号,总结所遇到的问题
    js日期函数
    跨域请求所遇到的错误
    ajax设置Access-Control-Allow-Origin实现跨域访问
    php提前输出响应及注意问题
    php中的日期和时间
    跨域请求json数据
    C++ 与 Visual Studio 2019 和 WSL(四)——库组件
    fpic 和 fPIC
  • 原文地址:https://www.cnblogs.com/chao202426/p/12836740.html
Copyright © 2020-2023  润新知