美文网首页
解构赋值是深拷贝还是浅拷贝?

解构赋值是深拷贝还是浅拷贝?

作者: 灭绝小师弟 | 来源:发表于2020-04-11 21:07 被阅读0次

    什么是深拷贝、浅拷贝

    深拷贝:修改新变量的值不会影响原有变量的值。默认情况下基本数据类型都是深拷贝。
    浅拷贝:修改新变量的值会影响原有的变量的值。默认情况下引用类型都是浅拷贝。

    解构赋值

    ES6的新特性,按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构。具体操作本文章不做描述。
    那么我们在使用解构赋值的时候,到底是深拷贝还是浅拷贝呢?我们可以通过以下的例子得出结论:

    const a = {
          name: 'name',
          age: 18,
          marriage: false,
          addr: { province: 'sichuan', city: 'chengdu' }
        }
    
    let { name, age, marriage, addr } = a
    
    name = 'myname'
    age = 26
    marriage = true
    addr.province = 'shanghai'
    addr.city = 'shanghai'
    
    console.log(name, age, marriage, addr) 
    console.log(a) 
    

    输出

    // myname 26 true {province: "shanghai", city: "shanghai"}
    // { name: "name", age: 18, marriage: false, addr: {province: "shanghai", city: "shanghai"} }
    

    以上例子中,我们从对象a中解构赋值了name、age、marriage、addr四个变量,分别是stringnumberbooleanobject类型。改变这四个变量的值后,再与a原来的值作对比,我们发现a的name,age,marriage属性没有改变,而addr属性发生了改变。由此可以得出结论,解构赋值对object类型只是浅拷贝。
    实际上,无论是使用扩展运算符(...)还是解构赋值,对于引用类型都是浅拷贝。所以在使用splice()、concat()、...对数组拷贝时,只有当数组内部属性值不是引用类型是,才能实现深拷贝。

    相关文章

      网友评论

          本文标题:解构赋值是深拷贝还是浅拷贝?

          本文链接:https://www.haomeiwen.com/subject/bfdpmhtx.html