javascript 变量两种类型——基本类型和引用类型
一直没有注意这些细节,翻开尘封已久的《javascript 权威指南》,就是传说中的犀牛,今天就要记录这一个被我忽视的细节。
我们常说变量“具有”或“存放”了值,但是它存放了什么呢?这是书中提出的疑问,刚看到这我就有些郁闷了。
是啊,存放了什么?为什么以前自己没有考虑这方面的东西?还是知识面不够啊,平时不够认真。
现在,开始抱佛脚吧。整理一下,嗯。
在js里面,把数据类型分为两组,即基本类型和引用类型。
数值、布尔值、null和未定义(undefined)都属于基本类型。对象、数组和函数则属于引用类型。
基本类型在内在中具有固定的大小,而引用类型则不同。例如,对象可以具有任意的长度,无固定大小。数组也是。
基本类型变量存的是数据的具体值,而引用类型变量保存的是值的引用。
var b = a; //把该变量复制到一个新变量
a = 4; //修改原始变量的值
alert(b); //显示3.14;副本没有改变
这是第一个例子,再来看第二个例子
var b = a; //把该引用复制到一个新变量
a[0] = 4; //用原始引用修改数组
alert(b); //新引用显示改变后的数组[4,2,3]

js 基本类型 引用类型
呵,上面的“鬼画符”已经给出解释了,这里就不再多说了,总之记住这些吧。
因为字符串具有可变的大小,所以显然它不能被直接存储在具有固定大小的变量中。
由于效率的原因,我们希望JS只复制对字符串的引用,而不是字符串的内容。
但是另一方面,字符串在许多方面都和基本类型的表现相似,而字符串是不可变的这一事实(即没法改变一个字符串值的内容)
使得字符串是基本类型还是引用类型的问题更加让人费解。
所以,你可以将字符串看成
行为与基本类型相似的不可变引用类型,或者是引用类型的内部功能实现的基本类型。。
文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/05/22/588/
版权所有 © 转载时必须以链接形式注明作者和原始出处!
今天更新的比较多,呵呵。
这个有意思,我正想多了解下JS方面的知识。
[回复]
@LAONB
呵,还好吧,本来还想再写一篇来着。
不过累了,呵呵。
[回复]
我现在有一本书叫javascript全程指南…..
不过我还没看完呢,现在被别人借走了.
[回复]
simaopig 回复:
五月 26th, 2009 at 6:03 下午
我现在看的是《权威指南》呵,感觉真的不错。嗯。
[回复]
字符串是基本数据类型
String对象是引用类型
基本数据类型字符串在进行对象操作时会临时转化为String对象,所以会出现令人费解的情况。
而JS String对象和其他对象一样只是普通的引用,所以无可变与不可变之说,因此最后一排红字的理解有待斟酌,它的基于对C#字符串的理解,很显然这两种语言对字符串的处理方式不一样。
[回复]
@Watersly
呃,这句话具体是出自《权威指南》。第四版65页。
字符串是基本数据类型,这是定义的。但是字符串确实比较特殊。所以书中将其拿出来单独说明其特殊性。
[回复]