一:节点克隆
var p = document.getElementsByTagName("p")[0];
var cP = p.cloneNode();//克隆p节点
var cP = p.cloneNode(true);//克隆p节点,深度克隆,克隆节点以及节点下面的子内容。
二 变量克隆
①基本类型的克隆
基本类型的复制,其实是在变量对象上创建一个新值,然后把要复制的值复制到新变量分配的位置上,当那个变量的值改变的时候,另一个值不会受到影响,按值传递。
(函数的参数是只能按值传递),也就是深度克隆,被复制的对象与新对象完全独立。
②引用类型的克隆
也会复制一份到为新变量分配的空间,不过被复制的变量是指针,这两个指针指向存储在堆中的同一个对象。如果改变其中一个变量的值,另一个也会改变,按指针传递。
也就是浅度克隆。
三:数组克隆
①slice()
1 var aArr = [0,1,2,3];
2 var m = aArr.slice(0);
3 aArr = [3,2,1,0];
克隆完毕后,改变aArr时,m不会改变,实现了数组的深度克隆。
②concat()
实现数组的合并,将当前数组和一个空数组合并。
③最简单的方法用一个loop将原来数组中的元素push()到新的空数组中。