zoukankan      html  css  js  c++  java
  • js的深拷贝的理解和实现

    一:什么是深拷贝?

    举例:a=b,正常情况下当改变a时b也改变,当改变a时b第一层不改变copy就是浅拷贝,当改变a时b底基层都不会改变就是深拷贝

    二:实现深拷贝

    1、最简单方法就是使用JSON.stringfy()和JSON.parse()。

    var syb = Symbol('obj');
    var person = {
       name :'tino',
       say: function(){
          console.log('hi');
       },
       ok: syb,
       un: undefined
    }
    var copyPerson = JSON.parse(JSON.stringify(person))

    但是有局限性:当值为undefinedfunctionsymbol 会在转换过程中被忽略,对象值有这三种的话用这种方法会导致属性丢失。

    2、通用方法(递归复制)

    deepClone => (obj){
        let objClone = Array.isArray(obj)?[]:{};
        if(obj && typeof obj==="object"){
            for(key in obj){
                if(obj.hasOwnProperty(key)){
                    //判断ojb子元素是否为对象,如果是,递归复制
                    if(obj[key]&&typeof obj[key] ==="object"){
                        objClone[key] = deepClone(obj[key]);
                    }else{
                        //如果不是,简单复制
                        objClone[key] = obj[key];
                    }
                }
            }
        }
        return objClone;
    }
    

    另外注意obj.hasOwnProperty(key)有什么用?

    使用了for in遍历数组,就需要用hasOwnProperty来规避遍历到原型链上的属性或方法

  • 相关阅读:
    手机操作
    模拟手机操作
    get_attribute_value
    test_order
    信息收集-FOFA资产收集与FOFA api
    html中form讲解
    安装redis
    yum vs rpm
    yum 安装java环境
    显示当前目录所有文件大小的命令ls -lht
  • 原文地址:https://www.cnblogs.com/piaobodewu/p/10393863.html
Copyright © 2011-2022 走看看