1. 程式人生 > >在JavaScript中值型別和引用型別的區別

在JavaScript中值型別和引用型別的區別

JavaScript中值型別和引用型別的區別

儲存方式不一樣

l基本資料型別

變數儲存的是簡單的資料段,儲存的是具體的值,是輕量級的資料儲存方式

l引用型別

引用型別的值,可以由多個值構成的物件,引用型別的變數儲存的是物件引用地址。引用型別是重量的資料儲存方式,分配在堆記憶體,頻繁建立物件有損效能。

引用型別(N)ObjectArrayDateFunction、……

二、動態屬性不一樣

l引用型別能動態新增屬性

var person=new Object();

person.name="jack";

person.age=20;

console.log("姓名:%s,年齡:%d",person.name,person.age);

結果


說明

屬性動態新增成功

l值型別不能新增

var person="";

person.name="jack";

person.age=20;

console.log("姓名:%s,年齡:%d",person.name,person.age);

結果


說明

屬性動態新增失敗,說明這是值型別的變數。

賦值的方式不一樣

l值型別,拷貝變數的內容

var num=10;

var num2=num;//建立新的空間,拷貝num的值到num2

這個兩個變數的內容是互不影響的,num2的內容是num的一個副本。類似作業系統的復件

var num=10;

var num2=num;

num2=100;

//並不會影響到num的值

console.log("num=%dnum2=%d",num,num2);

結果


演示記憶體的演變(現場操作)

l引用型別,拷貝引用地址

var person1=new Object();

person1.age=18;

var person2=person1;//拷貝引用地址給變數person2於是同時指向一個物件

person2.age=30;//事實上也是person1指向的那個物件

console.log("person1.age=%dperson2.age=%d",person1.age,person2.age);

結果


說明

兩個變數都指向同一個物件,物件就是希望被變數引用的,引用的數量也是沒有限制的。

記憶體變化情況繪圖(現場操作)