动手实现Redux(四) const obj2 = { ...obj } 为什么是浅拷贝


  • 0

    const obj = { a: 1, b: 2}
    const obj2 = { ...obj } // => { a: 1, b: 2 }
    

    obj2的改变不会影响obj了,为什么还是浅拷贝


  • 0

    使用 {...obj} 的形式,返回的 obj 和 obj2 的内存地址是不一样的,
    所以修改 obj2 , 不会影响 obj1.
    但是注意: 假设 obj 是这样的: const obj = {a: 1, b: 2, c: {name:'zzz'}},即有个 key 的 value 是对象.
    然后我们在写同样的代码:

    const obj = {a: 1, b: 2, c: {name:'zzz'}}
    const obj2 = {...obj}
    obj2.c.name = 'ccc' //这行代码操作了 obj2 中的 c 对象,同时,obj 中的 c 对象也指向这个内存地址
    console.log('obj', obj)
    //可以发现, obj 也发生了改变.
    

    所以说 {...obj}浅拷贝


登录后回复
 

与 ScriptOJ 的连接断开,我们正在尝试重连,请耐心等待