zoukankan      html  css  js  c++  java
  • 关于对象的深拷贝和浅拷贝

    • 浅拷贝(对象内存地址不同了,但是对象内部的引用类型的内存地址还是原来的值)
    1 const obj = {
    2     a: 100,
    3     b: [10,20,30],
    4     c: {
    5         x: 10    
    6     },
    7     d: /^d+$/
    8 }
    1 // 浅拷贝(一层) 不推荐
    2 const obj2 = {}
    3 for (let key in obj) {
    4     if (!obj.hasOwnProperty(key)) break;
    5     obj2[key] = obj[key]
    6 }
    7 // const obj2 = {...obj} 
    • 深拷贝

            自己项目中会用 JSON.parse(JSON.stringify(obj)) ,一般也够用了。但这方法有个弊端:对函数,正则,时间对象,数字对象等时,不适用,会有问题(函数被忽略,正则变为对象等)。而一些js库,如lodash,也有深拷贝的方法,比较复杂了。可以自己实现一个深拷贝的方法。

     1 // 深拷贝实现
     2 function deepClone(obj) {
     3     // 过滤特殊情况
     4     if (obj === nullreturn null;
     5     if (obj instanceof Function) {
     6         return new Function(obj);
     7     }
     8     if (typeof obj !== 'object') return obj;
     9     if (obj instanceof RegExp) {
    10         return new RegExp(obj);
    11     }
    12     if (obj instanceof Date) {
    13         return new Date(obj);
    14     }
    15     // 不直接创建空对象:克隆的结果和之前保持相同的所属类
    16     const newObj = new obj.constructor(obj)
    17     for (let key in obj) {
    18         if (obj.hasOwnProperty(key)) {
    19             newObj[key] = deepClone(obj[key])
    20         }
    21     }
    22     return newObj;
    23 }
  • 相关阅读:
    技术为辅,思维主导
    阶段性目标的设置
    非计算机专业测试之路
    第四章 Appium真机运行测试用例讲解
    第三章 Appium API介绍
    第二章 测试环境搭建(下)
    第二章 测试环境搭建(上)
    第一章 Appium简介
    测试人员的工作经验值钱吗
    2017 年该学习的编程语言、框架和工具
  • 原文地址:https://www.cnblogs.com/scallop/p/14517806.html
Copyright © 2011-2022 走看看