background image

javascript 引用类型和值类型 

/
变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是那些保
存在栈内存中的简单数据段,即这种值完全保存在内存中的一个位置。而引用类型值则是指
那些保存在堆内存中的对象,意思是变量中保存的实际上是一个指针,这个指针指向内存
中的另一个位置,该位置保存对象。

5 中基本数据类型:Undefined、Null、Boolean、Number 和

String.这 5 种基本数据类型的值在内存中占有固定大小的空间,因此可以把它们的值保存
在栈内存中。这样可以提高查询的速度。对于保存基本类型值的变量,我们说它们是按值访
问的,因为我们操作的是它们实际保存的值。如果赋给变量的是一个引用类型的值,则必须
在堆内存中为这个值分配空间。由于这种值得大小不固定,因此不能把它们保存到占内存中。
但内存地址的大小是固定的,因此可以将内存地址保存在栈内存中。这样,当查询引用类型
的变量时,就可以首先从栈中读取内存地址,然后再

“顺藤摸瓜”地找到保存在堆中的值。对

于这种查询变量值的方式,我们把它叫做按引用访问,因此我们操作的不是实际的值,而
是被那个值所引用的对象。
*/
/* 
//<strong>4.1.1 动态属性</strong> 
//

 

引用类型

var person = new Object(); 
person.name = "Nicholas"; 
alert(person.name);//Nicholas 
//

 

基本类型

var name = "Nicholas"; 
name.age=27; 
alert(name.age);//undefined 
 
//总结:对于引用类型的值,我们可以为其添加属性和方法,也可以改变和删除其属性和

 

方法。
//

 

但是,我们不能给基本型类的值添加属性,尽管这样做不会导致任何错误。

*/  
 
 
/* 
//<strong>4.1.2 复制变量值</strong> 
var num1=5; 
var num2=num1; 
alert(num2); 
 
var obj1=new Object(); 
var obj2 = obj1; 
obj1.name="Nicholas"; 
alert(obj2.name); 
*/