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 }
  • 相关阅读:
    移动端小tips
    是否该放弃东莞的工作
    读书有感-learn html5 and javascript for ios
    eNSP多路由实现互联互通(华为路由E口直连)
    iTextSharp操作表格排版问题
    我今天开通博客
    12年的女程序员重新回归
    前端css样式规划
    前端神器-webstorm2017
    远程桌面资料共享
  • 原文地址:https://www.cnblogs.com/houjl/p/10081313.html
Copyright © 2011-2022 走看看