首页 > 其他分享 >js 简单的深拷贝

js 简单的深拷贝

时间:2023-03-08 12:55:56浏览次数:52  
标签:obj1 target js DeepClone else result 简单 拷贝 null

本题是通过@郝晨光 的文章受到的启发,学习来的,大家有兴趣可以看一下,而且我觉得这种写法非常通俗易懂,工作中也足够去使用了。

function DeepClone(target){
    let result
    //1、先判断当前是否为对象 
    if(typeof target === 'object'){
        //2、判断当前是否为数组,如果是,设置result为数组,并且循环递归 push赋值
        if(Array.isArray(target)){
            result = []
            for (const key in target) {
                result = DeepClone(target[key])
            }
        //3、判断当前是否为null,如果是直接赋值
        }else if(target === null){
            result = null
        //4、判断当前是否为RegExp,如果是直接赋值
        }else if(target.constructor === RegExp){
            result = target
        }else{
            // 5、普通对象直接循环,递归
            result = {}
            for (const i in target) {
                result[i] = DeepClone(target[i])
            }
        }
    }else{
        //如果不是对象类型直接赋值
        result = target
    }

    return result
}

let obj1 = {
    a: {
        c: /a/,
        d: undefined,
        b: null
    },
    b: function () {
        console.log(this.a)
    },
    c: [
        {
            a: 'c',
            b: /b/,
            c: undefined
        },
        'a',
        3
    ]
}
let obj2 = DeepClone(obj1);
obj1.a.c = /b/
console.log(obj1)
console.log(obj2)

 

标签:obj1,target,js,DeepClone,else,result,简单,拷贝,null
From: https://www.cnblogs.com/chengxiang123/p/17191661.html

相关文章

  • JS上传文件夹的三种解决方案
    ​ 第一点:Java代码实现文件上传FormFilefile=manform.getFile();StringnewfileName= null;Stringnewpathname= null;StringfileAddre= "/numUp";try{......
  • 4_JSON格式
    ​ AJAX数据格式处理响应普通文本数据如果服务器给我们响应的数据非常简答,那么使用字符串就好了,不需要我们做复杂的处理,后台编码也简单.页面代码<%@pageconten......
  • js中 getTime 注意的点
     坐标:北京 问题:一直以为newDate(1970,0,1,0,0,0).getTime()===0实际newDate(1970,0,1,8,0,0).getTime()===0 详细: 摘自菜鸟  ......
  • 4_JSON格式
    ​ AJAX数据格式处理响应普通文本数据如果服务器给我们响应的数据非常简答,那么使用字符串就好了,不需要我们做复杂的处理,后台编码也简单.页面代码<%@pageconten......
  • js读取href中的参数函数
    functionGetQueryValue(queryName){ varquery=decodeURI(window.location.search.substring(1)); varvars=query.split("&"); for(vari=0;i<vars.lengt......
  • VSCode调试js代码的几种方式
    背景  在leetcode刷题时需要调试js代码  代码写在.js文件中 方式一node.js  安装node.js  配置launch.json      左侧【运行和调试】,【F5】启动调......
  • js 判断字节流是否可以按照utf8编码转成字符串
    下面的代码是我网上找的其他语言的实现方式改的js版本的,原版本的地址找不见了,但是我们还是要先感谢下原版本的作者不同于原版本,因为UTF8兼容ASCII,纯ASCII字节流也能用utf8......
  • js变量类型判断
    js变量类型判断方式首先我们知道js中若想验证某个值是否为null,应该使用操作符===,==无法区分null和undefined;定义一组变量,适用于全文;letnum =123;letnum1=1/......
  • 简单学习使用Tomcat
    安装Tomcat从Tomcat官方网站(https://tomcat.apache.org/)下载Tomcat安装包。在下载完成后,您可以按照以下步骤进行安装:解压Tomcat安装包到您想要安装Tomcat的目录中。......
  • js代理和期约
    判断类型时除了用typeof还可以用instanceofpersioninstanceofObjectforin用于枚举对象中的非符号键属性,forin不能保证返回的对象forof用于遍历可迭代对象的元素......