javascript引用类型值在处理后端数据时常碰到的问题
在开发过程当中,常常会遇到这样的情况:从后端取到的数据是一个对象,在javascript里就是Object,而这个对象里还包含对像,像这样的结构:
var obj = { name: "stone", sex: "male", age: '14', salary: [[1, 2, 3, 4], [5, 6, 7, 8, 9, 0]] };
而这个对象里的不同部分数据,或相同部分数据在前端我们需要在不同的viewComponet里渲染,比如上面这个数据对象中的salary,我可能在一个salary列表里要用,在个人中心也要用;于是开始处理数据
var fuc = function (data) { console.log("testdata", data); let name = data.name; let sex = data.sex; let age = data.age; let salary1 = data.salary[0]; salary1.splice(0, 1); salary1 = null; } fuc(obj);
由于obj对象是引用类型, 像这样的操作:
let salary1 = data.salary[0];
只是在栈内存中复制了一份obj.salary对像的地址或指针,obj.salary是数组,在javascript里也是引用类型。所以如果后面我操作这个salary1的时候,实际上就是操作obj.salary这个对像在堆内存中的数据; 所以最后打印的data值会改变,也就是改变了传入的数据源。
这时,如果这个数据源obj也通过消息传递给其它页面,那么数据已经不是原来的数据了,就会导致错误;
解决办法:
不对引用类型的数据源做增,册,改的操作

浙公网安备 33010602011771号