在JavaScript中值型別和引用型別的區別
在JavaScript中值型別和引用型別的區別
一、儲存方式不一樣
l基本資料型別
變數儲存的是簡單的資料段,儲存的是具體的值,是輕量級的資料儲存方式
l引用型別
引用型別的值,可以由多個值構成的物件,引用型別的變數儲存的是物件引用地址。引用型別是重量的資料儲存方式,分配在堆記憶體,頻繁建立物件有損效能。
引用型別(N多)Object、Array、Date、Function、……
二、動態屬性不一樣
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;
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);
結果
說明
兩個變數都指向同一個物件,物件就是希望被變數引用的,引用的數量也是沒有限制的。
記憶體變化情況繪圖(現場操作)