1. 程式人生 > >JavaScript兩種資料型別對比

JavaScript兩種資料型別對比

在CEMAScript中,變數可以存放兩種型別的值,即基本型別和引用型別
基本型別(原始型別)
基本型別有五種,即UndefinedNullBooleanNumberString
基本型別的值(原始值)是存放在棧中的簡單資料欄位。即,原始值直接儲存在變數訪問的位置。
引用型別
引用型別有三種,即ObjectFunctionArray
引用型別的值(引用值)是儲存在堆中的物件。即,存放在變數處的值是一個指標,指向儲存物件的記憶體處。

簡而言之,基本型別的變數直接儲存的是資料本身;引用型別的變數存放的是地址值,指向物件。具體關係如下圖所示:
這裡寫圖片描述
例題:
function change1 (a,b) {
var temp=a;
a=b;
b=temp;
alert(“a=”+a+” b=”+b);
}
var i=1,j=2;
change1(i,j);
alert(“i=”+i+” j=”+j);
執行之後,會發現i,j結果不變,因為基本型別的變數只是傳值,所以a,b的值換了,但不影響i,j的值。
function change2 (obj1) {
var temp=obj1.i;
obj1.i=obj1.j;
obj1.j=temp;
}
var obj={
i:5,
j:6
}
change2(obj);
alert(“i=”+obj.i+” j=”+obj.j);
執行之後,會發現i,j結果換了。因為引用型別的變數存放的是堆中的物件在記憶體中的地址值,所以obj將地址值傳給了obj1,此時obj1就指向了建立的物件{i:5, j:6}。當函式交換i,j的值時,就相當於交換obj中i,j的值,所以最後結果就顯示交換了。