题目泉源
在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节点,深度克隆,克隆节点以及节点下面的子内容。