zoukankan      html  css  js  c++  java
  • 深浅拷贝

    浅拷贝:
    当一个对象拷贝另一个对象的数据的时候,只要一个对象的数据发生改变另一个对象的数据也会发生改变
    因为浅拷贝拷贝的是引用的地址
    深拷贝:
    当一个数值拷贝另一个数值的时候,一个数值的发生改变另一个数值不会发生改变
    浅拷贝:
    let a = {
        age: 1
    }
    let b = a
    a.age = 2
    console.log(b.age) // 2

    1、通过 Object.assign 来解决这个问题。

    let a = {
        age: 1
    }
    let b = Object.assign({}, a)
    a.age = 2
    console.log(b.age) // 1

    2、也可以通过展开运算符(…)来解决

    let a = {
        age: 1
    }
    let b = {...a}
    a.age = 2
    console.log(b.age) // 1

    通常浅拷贝就能解决大部分问题了,但是当我们遇到如下情况就需要使用到深拷贝了

    let a = {
        age: 1,
        jobs: {
            first: 'FE'
        }
    }
    let b = {...a}
    a.jobs.first = 'native'
    console.log(b.jobs.first) // native

    深拷贝

    这个问题通常可以通过 JSON.parse(JSON.stringify(object)) 来解决。

    let a = {
        age: 1,
        jobs: {
            first: 'FE'
        }
    }
    let b = JSON.parse(JSON.stringify(a))
    a.jobs.first = 'native'
    console.log(b.jobs.first) // FE
    $.extend()
    除了可以给jquery对象扩展方法外还可以实现深浅拷贝
      布尔值 如果填true的情况下是深考贝 什么也不写就是浅拷贝
    var obj = {a:{name:"aa",age:19}};
    var obj1 = {b:{name:"bb",age:19}};
    
    var obj2 = $.extend({},obj,obj1)
    obj2.a.name="cc";
    console.log(obj2) 
        // a: { name: "cc", age: 19 } b: { name: "bb", age: 19 } __proto__: Object
    
    console.log(obj)
        // a: { name: "cc", age: 19 }
  • 相关阅读:
    [转]CTO谈豆瓣网和校内网技术架构变迁
    Hashtable Dictionary[必看]
    DotFuscator 小记
    博客园随笔添加自己的版权信息 [转]
    [转]关于支付宝API开发的一点心得
    .NET下实现分布式缓存系统Memcached
    4.9 利用对应的泛型替换Hashtable[转]
    dllhost.exe 解释
    C#命名规范,SqlServer命名规范
    用XenoCode 2006 加密dll(.NET
  • 原文地址:https://www.cnblogs.com/houjl/p/10081313.html
Copyright © 2011-2022 走看看