91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript數據類型的存儲方法詳解

發布時間:2020-10-09 02:37:59 來源:腳本之家 閱讀:131 作者:郭東生blog 欄目:web開發

一個很基礎的知識點,JavaScript中基本數據類型和引用數據類型是如何存儲的。

由于自己是野生程序員,在剛開始學習程序設計的時候沒有在意內存這些基礎知識,導致后來在提到“什么什么是存在棧中的,棧中只是存了一個引用”這樣的話時總是一臉懵逼。。

后來漸漸的了解了一些內存的知識,這部分還是非常有必要了解的。

基本數據結構

棧,只允許在一段進行插入或者刪除操作的線性表,是一種先進后出的數據結構。

堆是基于散列算法的數據結構。

隊列

隊列是一種先進先出(FIFO)的數據結構。

JavaScript中數據類型的存儲

JavaScript中將數據類型分為基本數據類型和引用數據類型,它們其中有一個區別就是存儲的位置不同。

基本數據類型

我們都知道JavaScript中的基本數據類型有:

  • String
  • Number
  • Boolean
  • Undefined
  • Null
  • Symbol(暫時不管)

基本數據類型都是一些簡單的數據段,它們是存儲在棧內存中。

引用數據類型

JavaScript中的引用數據類型有:

  • Array
  • Object

引用數據類型是保存在堆內存中的,然后再棧內存中保存一個對堆內存中實際對象的引用。所以,JavaScript中對引用數據類型的操作都是操作對象的引用而不是實際的對象。

可以理解為,棧內存中保存了一個地址,這個地址和堆內存中的實際值是相關的。

圖解

現在,我們聲明幾個變量試試:

var name="axuebin";
var age=25;
var job;
var arr=[1,2,3];
var obj={age:25};

可以通過下圖來表示數據類型在內存中的存儲情況:

JavaScript數據類型的存儲方法詳解

此時 name , age , job 三種基本數據類型是直接存在棧內存中的,而 arr , obj 在棧內存中只是存了一個地址來表示對堆內存中的引用。

復制

基本數據類型

對于基本數據類型,如果進行復制,系統會自動為新的變量在棧內存中分配一個新值,很容易理解。

引用數據類型

如果對于數組、對象這樣的引用數據類型而言,復制的時候就會有所區別了:

系統也會自動為新的變量在棧內存中分配一個值,但這個值僅僅是一個地址。也就是說,復制出來的變量和原有的變量具有相同的地址值,指向堆內存中的同一個對象。

JavaScript數據類型的存儲方法詳解

如果所示,執行了 var objCopy=obj 之后, obj 和 objCopy 具有相同的地址值,執行堆內存中的同一個實際對象。

這有什么不同呢?

當我修改 obj 或 objCopy 時,都會引起另一個變量的改變。

為什么?

為什么基礎數據類型存在棧中,而引用數據類型存在堆中呢?

  1. 堆比棧大,棧比對速度快。
  2. 基礎數據類型比較穩定,而且相對來說占用的內存小。
  3. 引用數據類型大小是動態的,而且是無限的。
  4. 堆內存是無序存儲,可以根據引用直接獲取。

總結

以上所述是小編給大家介紹的JavaScript數據類型的存儲方法詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對億速云網站的支持!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

疏附县| 延津县| 正安县| 嘉定区| 榕江县| 布拖县| 康定县| 大连市| 瓦房店市| 新绛县| 河津市| 恩施市| 平湖市| 曲沃县| 武隆县| 泾源县| 七台河市| 遵义市| 明水县| 师宗县| 大连市| 修水县| 西华县| 麻城市| 洪江市| 沾益县| 前郭尔| 太白县| 达州市| 七台河市| 广昌县| 积石山| 南阳市| 施秉县| 万源市| 嵩明县| 淮安市| 通海县| 阿拉善盟| 扶风县| 大连市|