JavaScript变量可能包含两种不同类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象。
在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。JavaScript有5种基本数据类型,Undefined、Null、Boolean、Number 和 String(详情请看: JavaScript数据类型)。这5种基本数据类型是按值访问的,因为可以操作保存在变量中的实际值。
引用类型的值是保存在内存中的对象。与其他语言不同,JavaScript不允许访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。
注意:在很多语言中,字符串以对象的形式来表示,因此被认为是引用类型,JavaScript放弃了这一传统。
下面的代码,证明了字符串是基本类型:
运行代码,弹出警告框,如下图所示:
假如字符串是引用类型值,那么 strPass1 和 strPass2 会指向同一段内存空间,更改 strPass1 的值,strPass2 的值也会随之改变,但是实际情况并非如此,strPass1 和 strPass2 是互不影响的。这说明字符串是基本类型值。
再看下面一段代码,证明了非空对象是引用类型:
运行代码,弹出警告框,如下图所示:
假如对象是基本类型值,那么改变 objDemo1.url 的值,不会影响到 objDemo2.url 的值,但是实际情况并非如此,改变 objDemo1.url 的同时,也改变了 objDemo2.url 的值,objDemo1 和 objDemo2 指向同一段内存空间。这说明,对象是引用类型值。
在将一个值赋给变量时,解析器必须确定这个值是基本类型值还是引用类型值。JavaScript有5种基本数据类型,Undefined、Null、Boolean、Number 和 String(详情请看: JavaScript数据类型)。这5种基本数据类型是按值访问的,因为可以操作保存在变量中的实际值。
引用类型的值是保存在内存中的对象。与其他语言不同,JavaScript不允许访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。为此,引用类型的值是按引用访问的。
注意:在很多语言中,字符串以对象的形式来表示,因此被认为是引用类型,JavaScript放弃了这一传统。
下面的代码,证明了字符串是基本类型:
- var strOriginal = "http://www.itxueyuan.org",
- strPass1 = strOriginal,
- strPass2 = strOriginal;
- strPass1 = "http://www.itxueyuan.org/javascript/";
- alert(
- "strPass1的值:" + strPass1 + "\n" +
- "strPass2的值:" + strPass2
- );
假如字符串是引用类型值,那么 strPass1 和 strPass2 会指向同一段内存空间,更改 strPass1 的值,strPass2 的值也会随之改变,但是实际情况并非如此,strPass1 和 strPass2 是互不影响的。这说明字符串是基本类型值。
再看下面一段代码,证明了非空对象是引用类型:
- function ClassDemo(){
- this.name = "JavaScript中文网";
- this.url = "http://www.itxueyuan.org";
- }
- var objDemo = new ClassDemo(),
- objDemo1 = objDemo,
- objDemo2 = objDemo;
- objDemo1.url = "http://www.itxueyuan.org/javascript/";
- alert(
- "objDemo1.url的值:\n" + objDemo1.url + "\n" +
- "objDemo2.url的值:\n" + objDemo2.url
- );
假如对象是基本类型值,那么改变 objDemo1.url 的值,不会影响到 objDemo2.url 的值,但是实际情况并非如此,改变 objDemo1.url 的同时,也改变了 objDemo2.url 的值,objDemo1 和 objDemo2 指向同一段内存空间。这说明,对象是引用类型值。