84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
JavaScript中面向对象的的深拷贝和浅拷贝是什么?
What are object-oriented deep copies and shallow copies in JavaScript? -PHP Chinese website Q&A-What are object-oriented deep copies and shallow copies in JavaScript? -PHP Chinese website Q&A
Let’s take a look and learn.
理解深拷贝和浅拷贝之前需要弄懂一些基础概念,内存中存储的变量类型分为值类型和引用类型。
1、值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量。
例如:
var num = 123; var num1=num;
表示变量中存储的数字是 123。然后将数据拷贝一份,就是将 123 拷贝一份. 那么内存中有 2 个 数组;将拷贝数据赋值给 num2,其特点是在内存中有两个数据副本.这可以理解为浅拷贝。
2、引用类型的赋值。
var o={name: '张三'}; var obj=o;
赋值就是将 变量 o 中存储的数据拷贝一份, 然后将该数据赋值给 obj。内存中有 1 分数据,利用 obj 修改的 name 属性会影响到 o 中的 name。
如果拷贝的时候, 将数据的所有引用结构都拷贝一份, 那么数据在内存中独立就是深拷贝;
如果拷贝的时候, 只针对当前对象的属性进行拷贝, 而属性是引用类型这个不考虑, 那么就是浅拷贝;
拷贝: 复制一份. 指将对象数据复制;
在讨论深拷与浅拷的时候一定要保证对象的属性也是引用类型。
What are object-oriented deep copies and shallow copies in JavaScript? -PHP Chinese website Q&A-What are object-oriented deep copies and shallow copies in JavaScript? -PHP Chinese website Q&A
Let’s take a look and learn.
理解深拷贝和浅拷贝之前需要弄懂一些基础概念,内存中存储的变量类型分为值类型和引用类型。
1、值类型赋值的存储特点, 将变量内的数据全部拷贝一份, 存储给新的变量。
例如:
表示变量中存储的数字是 123。然后将数据拷贝一份,就是将 123 拷贝一份. 那么内存中有 2 个 数组;将拷贝数据赋值给 num2,其特点是在内存中有两个数据副本.这可以理解为浅拷贝。
2、引用类型的赋值。
赋值就是将 变量 o 中存储的数据拷贝一份, 然后将该数据赋值给 obj。内存中有 1 分数据,利用 obj 修改的 name 属性会影响到 o 中的 name。
如果拷贝的时候, 将数据的所有引用结构都拷贝一份, 那么数据在内存中独立就是深拷贝;
如果拷贝的时候, 只针对当前对象的属性进行拷贝, 而属性是引用类型这个不考虑, 那么就是浅拷贝;
拷贝: 复制一份. 指将对象数据复制;
在讨论深拷与浅拷的时候一定要保证对象的属性也是引用类型。