先理解几个概念。
js的数据类型可以分为两种:
原始类型:数值,字符串,布尔值,null,undefined
对象类型:是属性的集合。例如:函数,数组
原始数据类型存储的是对象的实际数据,而对象类型存储的是对象的引用地址(对象的实际内容单独存放,为了减少数据开销通常存放在内存中)。其中,对象的原型也是引用对象,它把原型的方法和属性放在内存中,通过原型链的方式指向这个内存的地址。
浅度克隆:原始类型为值传递,对象类型为引用传递。原始类型可使用普通的克隆方式得到正确的结果,因为原始类型存储的就是对象的实际数据。
深度克隆:所有元素或属性均完全复制。与原对象完全脱离,也即是说所有对于新对象的修改都不会反映到原对象中。
数组或对象深度克隆方法:
var deepClone = function(obj){var str, newobj = obj.constructor === Array ? [] : {};if(typeof obj !== 'object'){return obj;} else if(window.JSON){str = JSON.stringify(obj), //系列化对象newobj = JSON.parse(str); //还原} else {for(var i in obj){newobj[i] = typeof obj[i] === 'object' ? arguments.callee(obj[i]) : obj[i];}}return newobj;};
应用deepClone 方法
var a = [1,2];
var b = deepClone(a);
a.push(3);
a;//[1,2,3]
b;//[1,2]