今天做项目遇到了一个奇怪的问题,对后台返回的数据进行处理的时候,我用一个变量去保存了这个数据,对变量进行取值操作,结果发现然后后台的数据也被我改变了,例如:
var a = b(b是数组或者对象);
对a.id进行操作,发现想对应id的内容也发生了变化。
后来想了半天才知道是因为js的深拷贝问题,数组和对象类型是个复杂的对象,尽管把值赋给了另外一个变量,但是这个变量和原来的数据都是指向的数组的地址,这个地址指向的是一个东西,所以会造成改变的是一个东西。这时候就需要深拷贝来解决。相关代码如下:
_deepCopy(
obj) {
let
str,
newobj;
str =
newobj =
obj
instanceof
Array ? [] : {};
if (
typeof
obj !==
"object") {
return;
}
else
if (
window.
JSON) {
str =
JSON.
stringify(
obj);
// 系列化对象
newobj =
JSON.
parse(
str);
// 还原
}
else {
for (
var
i
in
obj) {
newobj[
i] =
typeof
obj[
i] ===
"object" ?
_deepCopy(
obj[
i]) :
obj[
i];
}
}
return
newobj;
},