问题来源
在js中,引用类型的变量引用的只是内存的地址信息,所以在用其给其他变量赋值时,另一个变量得到的是该内存地址,不是内存中的内容,所以在另一个变量改变某个值的时候会反映在原始变量中。
例如:
var test={ name:'jack', age:'23', } var test1=test test1.name='rose' console.log(test.name) //rose console.log(test1.name) //rose
解决方法:
如果是数组:
最简单的方法就是:
var aArr = [0,1,2,3];
var m = aArr.slice(0);通用的:对数组、对象都适用的(其实就是循环遍历重新建一个):
function clone(obj) { var o; if (typeof obj == "object") { if (obj === null) { o = null; } else { if (obj instanceof Array) { o = []; for (var i = 0, len = obj.length; i < len; i++) { o.push(clone(obj[i])); } } else { o = {}; for (var j in obj) { o[j] = clone(obj[j]); } } } } else { o = obj; } return o; }
节点克隆:
var p = document.getElementsByTagName("p")[0]; var cP = p.cloneNode();//克隆p节点 var cP = p.cloneNode(true);//克隆p节点,深度克隆,克隆节点以及节点下面的子内容。 来源:itnose