05 March 2013
JS之传递对象
今天碰到一个小问题,卡了我好一会,查了下资料,发现一个以前没注意到的地方!问题如下:
var a = {'a':'b'}
var b= a;
delete(b['a'])
console.log(a);// 输出{}!
这当然不是我想要的结果,查阅了资料,发现了这么一个很基础的东东:
JS中分为两种类型:
- 基本类型(包括undefined,Null,boolean,String,Number),按值传递;
- 引用类型(包括数组,对象–当然了数组本身就是对象),按址传递,引用类型在值传递的时候是内存中的地址;
SO,看到了,引用类型,包括数组,对象,传递的时候传的是地址!
那么赋a给b后,操作b当然会改变a了。
故,如果想操作b而不改变a,那么我们需要深刻克隆,我在网上找到最巧妙的办法如下:
var s = JSON.stringify( obj );
var o = JSON.parse( s );
好了,总结一下:
对象赋值的时候记得是传递内存地址,如果需要深度克隆,使用 JSON.stringify+JSON.parse
。
Posted in 2013-03-05 12:15