复制对象并更改此复制变量不会更改原始对象吗?

时间:2019-11-12 19:45:13

标签: javascript redux

假设我有这个对象:

const obj = {
  a: {
    b: {
      c: {
        d: 'hi'
      }
    },
    g: 23
  },
  f: {
    e: [1,2]
  }
}

要在不更改变量的情况下更改变量“ d”,将这样做:

const newObj = {...obj};
newObj.a.b.c.d = 'Bye';
return newObj;

工作吗?

这是关于redux ...

2 个答案:

答案 0 :(得分:3)

–使用扩展运算符obj进行扩展时,只会复制...的第一级属性。

这称为浅拷贝,而不是深拷贝。

const obj = {
  a: {
    b: {
      c: {
        d: "hi"
      }
    },
    g: 23
  },
  f: {
    e: [1, 2]
  }
};

const newObj = { ...obj };
newObj.a.b.c.d = "Bye";

console.log(obj.a.b.c.d); // Bye

答案 1 :(得分:1)

正如@ASDFGerge所提到的,您应该使用它来真正内部化它。

但是简短的答案是“否”,您的副本'keyWindow' was deprecated in iOS 13.0: Should not be used for applications that support multiple scenes as it returns a key window across all connected scenes 仅深1层。更改newObj不会修改原始文档,但是更改newObj.a(或更进一步的内容)将会

newObj.a.b