JS 的引用赋值与传值赋值

准备拿别人的代码敲敲,自己感觉一下;然后刚开始就遇到了问题。
怎么都想象不来为什么下面的例子中的 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
*/
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,372评论 11 349
  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,731评论 3 83
  • 前言 不知道大家有没有这样一种感觉,程序员的数量井喷了。可能是因为互联网火了,也可能是各家培训机构为我们拉来了大量...
    活这么大就没饱过阅读 2,748评论 6 25
  • 任何语言所编写的程序,其中的各类型的数据都需要一个存储位置,Java中数据的存储位置分为以下5种: 1.寄存器 最...
    闭家锁阅读 2,312评论 0 0
  • 文/安若木槿 赵雷,是第二个,几乎所有歌都被我搜罗了听的歌手,也是我特心疼的一个歌手。 接触民谣之初,跟着一群爱民...
    蜉蝣舟阅读 2,669评论 30 38