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 }
  • 相关阅读:
    父组件向子组件传递数据(vue.js)
    vue引入JQ的方法
    webstorm添加*.vue文件代码提醒支持webstorm支持es6vue里支持es6写法
    创建脚手架步骤
    JS严格校验身份证号
    微信小程序开发工具 常用快捷键
    GIT 常用命令
    git 操作
    通过selenium(也有Puppeter版在最后)登录网页获取特定信息
    用Django ORM实现树状结构
  • 原文地址:https://www.cnblogs.com/houjl/p/10081313.html
Copyright © 2011-2022 走看看