JavaScript 值型別和引用型別在堆疊中的存放
本章節介紹一下JavaScript的值型別和引用型別資料是如何在堆疊中存放的。
其實並不僅僅JavaScript這樣,其他語言也大致如此。
一.JavaScript中的資料型別:
資料型別總體可以分為兩類:
(1).值型別
(2).引用型別
可能不同的文章,名稱上有所區別,其實都是一回事。
(1).值型別資料有:string、number、boolean、symbol(ES6新增)、null、undefined。
(2).引用型別資料有:物件和函式。
更多內容可以參閱JavaScript 資料型別一章節。
二.棧和堆簡單介紹:
棧是一種先進後出的資料結構,我們可以通過陣列進行以下模擬。
程式碼如下:
[JavaScript] 純文字檢視 複製程式碼var arr = []; //建立一個棧 arr.push("one");//壓入元素"one" ["one"] arr.push("two");//壓入元素"two" ["one","two"] arr.pop();//彈出"two" arr.push("three");//壓入元素"three" ["one","three"]
上面的相關方法可以參閱一下兩篇文章:
(1).JavaScript push()一章節。
(2).JavaScript pop()一章節。
與上面程式碼對應的圖示如下:
值型別是儲存在棧中的簡單欄位,它們直接儲存在變數的訪問位置。
堆是存放資料的基於雜湊演算法的資料結構,引用型別資料就存放在堆中。
引用型別資料的實際值儲存在堆中,棧中的變數只是儲存的一個指向堆的地址。
看如下程式碼例項:
[JavaScript] 純文字檢視 複製程式碼var obj = new Object();
下面就對上面的程式碼做一下解釋:
變數obj在棧中,它儲存的是一個地址,這個地址是指向物件new Object()。
物件new Object()儲存在堆中。
三.存放資料為什麼要區分棧和堆:
什麼東西都要講究一個平衡,棧的儲存量比較小,但是速度快。堆則恰好相反。
因為值型別資料比較簡單,確定一個資料就確定了它的大小,所以適合儲存在棧中。
但是引用型別資料可以無限的擴充套件,幾乎是任意的修改,所以適合儲存在堆中。
相關文章
- C#引用型別和值型別在堆、棧中的儲存C#型別
- JavaScript值型別和引用型別JavaScript型別
- 值型別和引用型別型別
- JavaScript - 基本型別與引用型別值JavaScript型別
- Swift值型別和引用型別Swift型別
- javascript原始值和引用值型別及區別JavaScript型別
- .NET中的六個重要概念:棧、堆、值型別、引用型別、裝箱和拆箱型別
- 通過一個例項重新認識引用型別,值型別,陣列,堆疊,ref型別陣列
- 圖解C#的值型別,引用型別,棧,堆,ref,out圖解C#型別
- 值型別與引用型別型別
- 【轉】.NET中的六個重要概念:棧、堆、值型別、引用型別、裝箱和拆箱型別
- 值型別與引用型別的區別型別
- JS 資料型別和堆疊JS資料型別
- JavaScript引用型別-Object型別JavaScript型別Object
- C#的型別——值型別與引用型別C#型別
- Swift 中的值型別與引用型別使用指北Swift型別
- c#:值型別&引用型別C#型別
- 從賦值看基本型別和引用型別的區別賦值型別
- Python引用型別和值型別的區別與使用Python型別
- C#變數型別(1):引用型別和值型別 (轉)變數型別
- 區別值型別資料和引用型別資料型別
- 基本資料型別和引用型別的初始值資料型別
- javascript:引用型別JavaScript型別
- JavaScript中的Object的引用型別JavaScriptObject型別
- 33 個 JavaScript 核心概念系列(二): 值型別與引用型別JavaScript型別
- javascript基本型別 引用型別 基本包裝型別JavaScript型別
- JavaScript 基本資料型別和引用型別的區別詳解JavaScript資料型別
- golang中 值型別,指標,引用的區別Golang型別指標
- C#程式設計引用型別和值型別 以及引用傳遞和值傳遞C#程式設計型別
- Structs vs classes(值型別vs引用型別)Struct型別
- 【C#之值型別vs引用型別】C#型別
- Java的基本型別和引用型別Java型別
- JavaScript的原生引用型別JavaScript型別
- javascript 函式引用型別和簡單型別傳參JavaScript函式型別
- Golang的值型別和引用型別的範圍、儲存區域、區別Golang型別
- C# 物件比較(值型別、引用型別)C#物件型別
- js基本型別和引用型別區別JS型別
- 《JavaScript物件導向精要》之一:基本型別和引用型別JavaScript物件型別