基本型別和引用型別區別和指向問題
阿新 • • 發佈:2018-11-08
基本型別: 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賦值實際上是一個指標的賦值,這個指標儲存了指向儲存在堆記憶體的一個物件,那麼賦值操作後,兩個變數都儲存了同一個物件地址,這兩個地址指向了同一個物件,因此改變了其中任何一個變數都會互相影響。