zoukankan      html  css  js  c++  java
  • js实现深拷贝

      js的数据类型分为基本数据类型和引用数据类型。基本数据类型是直接赋值,引用数据类型分为浅拷贝和深拷贝。浅拷贝是复制对象的指针,深拷贝是复制对象所有属性再内存中独立存在。

      浅拷贝如下:

    var obj = {a: 'test', b: {c: 0}}
    var obj1 = obj
    var obj2 = shallowCopy(obj);
    function shallowCopy(src) {
        var dst = {};
         for (var prop in src) {
             if (src.hasOwnProperty(prop)) {
                 dst[prop] = src[prop];
              }
          }
         return dst;
    }
    
    var obj3 = Object.assign({}, obj)
    
    obj.a = 'arr'
    obj.b.c = 1
    
    console.log(obj) // {a: 'arr', b: {c: 1}}
    console.log(obj1) // {a: 'arr', b: {c: 1}}
    console.log(obj2) // {a: 'test', b: {c: 1}}
    console.log(obj3) // {a: 'test', b: {c: 1}}
    

      深拷贝实现如下:

    function extend (source) {
      var target
      if (typeof source === 'object') {
        target = Array.isArray(source) ? [] : {}
        for (var key in source) {
          if (source.hasOwnProperty(key)) {
            if (typeof source[key] !== 'object') {
              target[key] = source[key]
            } else {
              target[key] = extend(source[key])
            }
          }
        }
      } else {
        target = source
      }
      return target
    }
    
    var obj1 = {a: {b: 0}}
    var cpObj1 = extend(obj1)
    obj1.a.b = 1
    console.log(cpObj1) // {a: {b: 0}}
    
    var obj2 = [[0]]
    var cpObj2 = extend(obj2) 
    obj2[0][0] = 1
    console.log(cpObj2) // [[0]]
    

      

  • 相关阅读:
    c语言指针讲解第一节初识指针
    linux的的一些入门常识
    sql手注的思路
    mysql主从备份配置
    CentOS 6.5 nginx+tomcat+ssl配置
    mysql 5.7.18安装教程
    minIO分布式集群搭建+nginx负载均衡
    Linux常用命令
    使用python连接mysql数据库——pymysql模块的使用
    with与上下文管理器
  • 原文地址:https://www.cnblogs.com/zjp-zxy/p/9870658.html
Copyright © 2011-2022 走看看