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也通过消息传递给其它页面,那么数据已经不是原来的数据了,就会导致错误;

 

解决办法:

 

不对引用类型的数据源做增,册,改的操作

 
 

 

posted @ 2017-09-14 09:49  量大福也大  阅读(93)  评论(0)    收藏  举报