在JavaScript中實值型別和參考型別的區別
一、儲存方式不一樣
l基礎資料型別 (Elementary Data Type)
變數儲存的是簡單的資料區段,儲存的是具體的值,是輕量級的資料存放區方式
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;//並不會影響到num的值
console.log("num=%d num2=%d",num,num2);
結果
示範記憶體的演變(現場操作)
l參考型別,拷貝引用地址
var person1=new Object();
person1.age=18;
var person2=person1;//拷貝引用地址,給變數person2,於是同時指向一個對象
person2.age=30;//事實上也是person1指向的那個對象
console.log("person1.age=%d person2.age=%d",person1.age,person2.age);
結果
說明
兩個變數都指向同一個對象,對象就是希望被變數引用的,引用的數量也是沒有限制的。
記憶體變化情況繪圖(現場操作)