zoukankan      html  css  js  c++  java
  • 前端面试题整理——深拷贝

        const obj = {
            a: 100,
            b: {
                b1: [1, 2, 3],
                b2: 'string'
            },
            c: ['a', 'b', 'c']
        }
    
        /*
        *  没做深拷贝的效果
        const obj2 = obj
        obj2.a = 200
        obj2.b.b2 = 'abc123'
        obj2.c[0] = 'aa'
        console.log(obj)
        console.log(obj2)
    
        obj2修改的内容会影响obj的内容,因为他们修改的都是同一个堆内容
        * */
    
        const obj2 = deepClone(obj);
        obj2.a = 200
        obj2.b.b2 = 'abc123'
        obj2.c[0] = 'aa'
        console.log(obj)
        console.log(obj2)
    
        /**
         * 深拷贝
         * @param {Object} obj 要深拷贝的对象
         * */
        function deepClone(obj = {}) {
            // obj如果不是引用类型,或者是null,直接返回
            if (typeof obj !== 'object' || obj == null) {
                return obj
            }
            // 初始化返回结果
            let result;
            if (obj instanceof Array) {
                result = []
            } else {
                result = {}
            }
            // 遍历obj
            for (let key in obj) {
                // 保证key不是原型的属性
                if (obj.hasOwnProperty(key)) {
                    // 递归调用
                    result[key] = deepClone(obj[key])
                }
            }
            return result
        }

    考点:

    不同类型使用内存堆栈的情况

    放弃安逸,持续努力——成长
  • 相关阅读:
    π框架参数规则(正则表达式验证)
    SQL查询优化的一些建议
    phalApi框架打印SQL语句
    phpstorm注册码
    phalApi数据库操作
    内容的全局搜索
    xampp虚拟主机的配置
    navicat自动备份数据
    IOC和AOP扩展
    Spring AOP
  • 原文地址:https://www.cnblogs.com/MarsPGY/p/13461919.html
Copyright © 2011-2022 走看看