首页 > JavaScript > javascript 变量两种类型——基本类型和引用类型
2009五月22

javascript 变量两种类型——基本类型和引用类型

一直没有注意这些细节,翻开尘封已久的《javascript 权威指南》,就是传说中的犀牛,今天就要记录这一个被我忽视的细节。

我们常说变量“具有”或“存放”了值,但是它存放了什么呢?这是书中提出的疑问,刚看到这我就有些郁闷了。

是啊,存放了什么?为什么以前自己没有考虑这方面的东西?还是知识面不够啊,平时不够认真。

现在,开始抱佛脚吧。整理一下,嗯。

在js里面,把数据类型分为两组,即基本类型和引用类型。

数值、布尔值、null和未定义(undefined)都属于基本类型。对象、数组和函数则属于引用类型。

基本类型在内在中具有固定的大小,而引用类型则不同。例如,对象可以具有任意的长度,无固定大小。数组也是。

基本类型变量存的是数据的具体值,而引用类型变量保存的是值的引用。

var a = 3.14;   //声明并初始化一个变量
var b = a;  //把该变量复制到一个新变量
a = 4;      //修改原始变量的值
alert(b);   //显示3.14;副本没有改变

这是第一个例子,再来看第二个例子

var a = [1,2,3];    //初始化一个引用数组的变量
var b = a;      //把该引用复制到一个新变量
a[0] = 4;       //用原始引用修改数组
alert(b);       //新引用显示改变后的数组[4,2,3]
js 基本类型 引用类型

js 基本类型 引用类型

呵,上面的“鬼画符”已经给出解释了,这里就不再多说了,总之记住这些吧。

因为字符串具有可变的大小,所以显然它不能被直接存储在具有固定大小的变量中。

由于效率的原因,我们希望JS只复制对字符串的引用,而不是字符串的内容。

但是另一方面,字符串在许多方面都和基本类型的表现相似,而字符串是不可变的这一事实(即没法改变一个字符串值的内容)

使得字符串是基本类型还是引用类型的问题更加让人费解。

所以,你可以将字符串看成

行为与基本类型相似的不可变引用类型,或者是引用类型的内部功能实现的基本类型。。

文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/05/22/588/
版权所有 © 转载时必须以链接形式注明作者和原始出处!

6 Responses to “javascript 变量两种类型——基本类型和引用类型”

  1. #1 LAONB 回复 | 引用 Post:2009-05-22 22:24

    今天更新的比较多,呵呵。
    这个有意思,我正想多了解下JS方面的知识。

    [回复]

  2. #2 simaopig 回复 | 引用 Post:2009-05-22 22:49

    @LAONB
    呵,还好吧,本来还想再写一篇来着。
    不过累了,呵呵。

    [回复]

  3. #3 风也飘泊 回复 | 引用 Post:2009-05-26 17:04

    我现在有一本书叫javascript全程指南…..

    不过我还没看完呢,现在被别人借走了.

    [回复]

    simaopig 回复:

    我现在看的是《权威指南》呵,感觉真的不错。嗯。

    [回复]

  4. #4 Watersly 回复 | 引用 Post:2010-06-02 10:00

    字符串是基本数据类型
    String对象是引用类型
    基本数据类型字符串在进行对象操作时会临时转化为String对象,所以会出现令人费解的情况。
    而JS String对象和其他对象一样只是普通的引用,所以无可变与不可变之说,因此最后一排红字的理解有待斟酌,它的基于对C#字符串的理解,很显然这两种语言对字符串的处理方式不一样。

    [回复]

  5. #5 simaopig 回复 | 引用 Post:2010-06-03 09:02

    @Watersly
    呃,这句话具体是出自《权威指南》。第四版65页。

    字符串是基本数据类型,这是定义的。但是字符串确实比较特殊。所以书中将其拿出来单独说明其特殊性。

    [回复]

发表评论

:wink: :twisted: :roll: :oops: :mrgreen: :lol: :idea: :evil: :cry: :arrow: :?: :-| :-x :-o :-P :-D :-? :) :( :!: 8-O 8)