准备拿别人的代码敲敲,自己感觉一下;然后刚开始就遇到了问题。
怎么都想象不来为什么下面的例子中的 a.x为什么 ;因为基础比较小白,就有人说道js里面的引用赋值跟传值赋值的区别;
附上一个不错的文档,也很清楚的解决了这个问题;
http://www.cnblogs.com/cench/p/6019453.html
var a={"x":1};
var b=a;
b.x=2;
a.x;
/*
2
*/
JS数字的类型:基本类型和引用类型;
基本类型:number,string类型都是基本类型,而基本类型存放在栈区,访问时按值访问,赋值是按照普通方式赋值;
引用类型:对象和数组是通过引用来赋值的;
引用类型指的是对象。可以拥有属性和方法,并且我们可以修改其属性和方法。引用对象存放的方式是:在栈中存放对象变量标示名称和该对象在堆中的存放地址,在堆中存放数据。
对象使用的是引用赋值。当我们把一个对象赋值给一个新的变量时,赋的其实是该对象的在堆中的地址,而不是堆中的数据。也就是两个对象指向的是同一个存储空间,无论哪个对象发生改变,其实都是改变的存储空间的内容,因此,两个对象是联动的。
var obj = {x:1,y:2};
//obj.x;
/*
1
*/
obj["x"];
/*
1
*/
var a=30;
var b=a;//30
a=20;
b;
a;
var a=[1,2];
var b=a;
a[0]=5;
b;
/*
5,2
*/
var a = [1,2];
var b = a.slice(0);
b[0]=6;
b;
/*
6,2
*/
var a = [1,2,3];
var b = a;
a = [4,5,6];
b;
/*
1,2,3
*/