拷贝,拷贝字面意思就算cope,我们要将一个或者一些数据为模板复制到另一个新数据中,怎么复制呢,在这之前我们要知道js数据是怎样存储的,才能进行更清晰的知道下一步复制是如何操作的
首先:
数据分为基本数据类型(String(字符串), Number(数字), Boolean(布尔), Null, Undefined,NAN)和引用数据类型。
基本数据类型:是指直接存储在栈中的数据
引用数据类型:存储的是,该对象在栈中的地址,真实的数据存放在堆内存里

对于浅拷贝
1.浅拷贝只会复制上图中的栈内存,所以对于对象来说,只会复制指向某个对象的指针,而不复制对象本身,新旧对象还是共享同一块内存。
2.如果属性是基本类型,拷贝的就是基本类型的值;如果属性是引用类型,拷贝的就是内存地址 ,因此如果其中一个对象改变了这个地址,那么另外一个拷贝或者背拷贝对象也会发生改变。
例:
var arr1 = ['red','pink'];
var arr2 = arr1;//cope
console.log(arr2)//['red','pink'];
arr1.push('black') ;//改变arr1的值
console.log(arr2)//['red','pink','black']
console.log(arr1)//["red", "pink", "black"]
对于深拷贝
深拷贝必须是cope对方的每一个基本数据类型的新对象,新对象跟原对象不共享内存,修改新对象不会改变原对象,修原对象也不会改变新对象,完完全全的是俩个独立占用内存的对象。
例:
var arr1 = ['red','pink'];
var arr2=[]
for(var key in arr1){
var arr2.push(key); 复制
}
console.log(arr2)//['red','pink'];
arr1.push('black') ;//改变arr1的值
console.log(arr2)//['red','pink']
console.log(arr1)//["red", "pink", "black"]
深拷贝有许多方法:例如
for循环(最不可取)
jquery的$.extend方法(非常适用)
JSON中的
JSON.stringify(obj)
JSON.parse(_obj)
(弊端无法cope对象中的方法)