JS基本類型和引用類型的值

JavaScript變量可能包含兩種不同類型的值:基本類型值和引用類型值。基本類型值指的是簡單的數據段,而引用類型值指那些可能由多個值構成的對象。

在將一個值賦給變量時,解析器必須確定這個值是基本類型值還是引用類型值。JavaScript有5種基本數據類型,Undefined、Null、Boolean、Number 和 String(詳情請看:JavaScript數據類型)。這5種基本數據類型是按值訪問的,因爲可以操作保存在變量中的實際值。

引用類型的值是保存在內存中的對象。與其他語言不同,JavaScript不允許訪問內存中的位置,也就是說不能直接操作對象的內存空間。在操作對象時,實際上是在操作對象的引用而不是實際的對象。爲此,引用類型的值是按引用訪問的。

注意:在很多語言中,字符串以對象的形式來表示,因此被認爲是引用類型,JavaScript放棄了這一傳統。

下面的代碼,證明了字符串是基本類型:
  1. var strOriginal = "http://www.itxueyuan.org",
  2. strPass1 = strOriginal,
  3. strPass2 = strOriginal;
  4. strPass1 = "http://www.itxueyuan.org/javascript/";
  5. alert(
  6. "strPass1的值:" + strPass1 + "\n" +
  7. "strPass2的值:" + strPass2
  8. );
運行代碼,彈出警告框,如下圖所示:

假如字符串是引用類型值,那麼 strPass1 和 strPass2 會指向同一段內存空間,更改 strPass1 的值,strPass2 的值也會隨之改變,但是實際情況並非如此,strPass1 和 strPass2 是互不影響的。這說明字符串是基本類型值。

再看下面一段代碼,證明了非空對象是引用類型:
  1. function ClassDemo(){
  2. this.name = "JavaScript中文網";
  3. this.url = "http://www.itxueyuan.org";
  4. }
  5. var objDemo = new ClassDemo(),
  6. objDemo1 = objDemo,
  7. objDemo2 = objDemo;
  8. objDemo1.url = "http://www.itxueyuan.org/javascript/";
  9. alert(
  10. "objDemo1.url的值:\n" + objDemo1.url + "\n" +
  11. "objDemo2.url的值:\n" + objDemo2.url
  12. );
運行代碼,彈出警告框,如下圖所示:

假如對象是基本類型值,那麼改變 objDemo1.url 的值,不會影響到 objDemo2.url 的值,但是實際情況並非如此,改變 objDemo1.url 的同時,也改變了 objDemo2.url 的值,objDemo1 和 objDemo2 指向同一段內存空間。這說明,對象是引用類型值。
發佈了6 篇原創文章 · 獲贊 7 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章