美文网首页
js深拷贝和浅拷贝

js深拷贝和浅拷贝

作者: 野蛮生长_ed2e | 来源:发表于2018-06-15 12:23 被阅读0次

    一.如何区分深拷贝和浅拷贝
    如果A复制了B,对B改变看看A是不是会改变,如果A也跟着改变就是浅复制,如果A不跟着改变就是深复制
    举个🌰
    ![image](https://img.haomeiwen.com/i10044574/ac1c08810a1a1785?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240
    修改了B但是A也会跟着改变

    这里就引入了基本数据类型和引用数据类型
    1.基本数据类型:
    值存储在栈内存中,但我们复制的时候,会新开辟一个栈,A = B之后,改变B,A不会受影响,但是这不断深拷贝,因为基本数据类型谈不上深拷贝,深拷贝只存在复杂的引用数据类型
    2.引用数据类型
    名存在栈内存中,值存在堆内存中,在复制的时候,复制的是是指向堆内存的指针,所以两者的值指向一个地址,因此改变其中一个就会引起其他的值变化,所以要在堆内存里面开辟一个新的空间就成为深拷贝

    二.slice到底是深复制还是浅复制


    image

    上面的b没有受a的影响,那么slice就是深复制啦😎
    然而。。。。。😅


    二级拷贝没有成功
    所以slice不是真正的深拷贝
    结构赋值也是浅拷贝

    三.深克隆
    在遇到函数、 undefined 或者 symbol 的时候,该对象也不能正常的序列化

    let a = {
      age: undefined,
      sex: Symbol('male'),
      jobs: function() {},
      name: 'aaa'
    }
    let b = JSON.parse(JSON.stringify(a))
    console.log(b) // {name: "aaa"}
    

    相关文章

      网友评论

          本文标题:js深拷贝和浅拷贝

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