1. 程式人生 > >基本型別和引用型別區別和指向問題

基本型別和引用型別區別和指向問題

基本型別: null, undefined, string, boolean, number (存放在棧記憶體中)

引用型別: array, object (存放在堆記憶體中)

1. 基本型別指標問題

var a=2; 
var b=a; 
b=3; 
console.log(a);//2 
console.log(b);//3 

第二句b=a,在這裡b只是一個指向a的指標,指標的指向可以改變,所以b=3改變了指標的指向,事實上是指標的指向改變了,基本資料型別存放在棧中,當使用a的值來初始化b時,b中也儲存了2,但是b中的2和a中的2是完全獨立的,b中的值只是a中的一個副本,所以這兩個變數可以參與任何操作而不會互相影響。 

2.引用型別指標問題

var aa=[3,4,2,5]; 
var bb=aa; 
bb.push(6); 
console.log(aa);//34256 
console.log(bb);//34256

引用型別的儲存需要在記憶體的棧區和堆區共同完成,棧區儲存變數識別符號和指向堆記憶體的地址,上面的bb=aa賦值實際上是一個指標的賦值,這個指標儲存了指向儲存在堆記憶體的一個物件,那麼賦值操作後,兩個變數都儲存了同一個物件地址,這兩個地址指向了同一個物件,因此改變了其中任何一個變數都會互相影響。