【Day20】浅层复制及深层复制

在 JavaScript 中,物件型别是利用传参考的方式来传递它的值,

因此当我们要复制出独立的物件型别时,

就必须使用浅层复制深层复制的方式来复制它的值

浅层复制(Shallow Copy)

当我们用浅层复制来复制物件时,只能复制第一层的物件内容,

第二层之後的物件内容还是会以传参考的方式来传递,

这称为浅层复制(Shallow Copy),

我们使用范例来看浅层复制(Shallow Copy)的方法有哪些:

1. for ... in

使用 for ... in 将值传入新物件中

const family = {
    name: '小明家',
    members: {
      dad: 'dad',
      mom: 'mom',
      son: '小明',
    },
};

const newFamily = {};

for (let key in family) {
    // key 为 family 的属性
    // family[key] 为该属性的值
    newFamily[key] = family[key];
};

newFamily.name = '威威家';

console.log(family);
console.log(newFamily);

console.log(newFamily === family);  // false

由结果可以看出在 newFamilyname 修改後,原物件 family 资料不变,

而且两个物件的记忆体位址也不同,

但是如果修改第二层的物件资料时

newFamily.members.son = 'weiwei';
console.log(family);
console.log(newFamily);

此时会连同 family 内的资料一并修改,

这就是所谓的浅层复制(Shallow Copy),

以下列出浅层复制(Shallow Copy)的另外两种方法

2. Object.assign()

() 前面放空物件,後面放需要复制的物件型别内容

const newFamily2 = Object.assign({}, family);

3. 展开语法(...)

在物件实字 {} 内输入 ... 後放入需要复制的物件型别内容

const newFamily3 = {...family};

深层复制(Deep Copy)

完全复制物件型别内容,称为深层复制(Deep Copy)

范例:

我们会使用 JSON.stringify() 将物件转换成 JSON 格式,

再使用 JSON.parse() 将 JSON 格式转成物件

const family = {
    name: '小明家',
    members: {
      dad: 'dad',
      mom: 'mom',
      son: '小明',
    },
};

const newFamily = JSON.parse(JSON.stringify(family));

newFamily.members.son = 'weiwei';

console.log(family);
console.log(newFamily);

此时可以看见就算修改第二层的物件内容 family 内的资料也不会被修改,

这两个物件内容已经完全储存在不同记忆体位址,

而这就是所谓的深层复制(Deep Copy)

以上是今天的内容,感谢观看!!


<<:  【心得】你今天种菜了吗? grid之路-grid的使用(3)

>>:  Day 05 - TypeScript 语法

浅谈负载平衡

今天第二天,我们浅谈负载平衡,以及负载平衡可能遇到的问题。 Day02 浅谈负载平衡 ...

Day 15 : 基础套件的介绍-os套件,帮助你管理资料(下)

今天继续来讨论OS 若想要得到当前路径,可以使用os.getcwd()。 import os pat...

python30天-DAY30

铁人挑战30天就这样结束拉,这是第一次参加发文类的比赛,如果在文章内有语意不通顺或是打错字的请各位多...

[重构倒数第24天] - You should use Skeleton

前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...

Day28 D3js Diagram常见的两点浪漫路径

D3js Diagram常见的两点浪漫路径 用途 在绘制diagram图表时,会用到的垂直水平连线,...