摘要:最近由于做的項目需求牽扯到了大量的數據處理,于是就想了解一下中的數據類型,于是就百度了一下找到了些干貨,在這里精簡下做個筆記,以方便日后需要的時候查看這里先說兩個概念堆棧堆是堆內存的簡稱。
最近由于做的項目需求牽扯到了大量的數據處理,于是就想了解一下javascript中的數據類型,于是就百度了一下找到了些干貨,在這里精簡下做個筆記,以方便日后需要的時候查看:
這里先說兩個概念:1、堆(heap)2、棧(stack)
堆 是堆內存的簡稱。
棧 是棧內存的簡稱。
說到堆棧,我們講的就是內存的使用和分配了,沒有寄存器的事,也沒有硬盤的事。
各種語言在處理堆棧的原理上都大同小異。堆是動態分配內存,內存大小不一,也不會自動釋放。棧是自動分配相對固定大小的內存空間,并由系統自動釋放。
javascript的基本類型就5種:Undefined、Null、Boolean、Number和String,它們都是直接按值存儲在棧中的,每種類型的數據占用的內存空間的大小是確定的,并由系統自動分配和自動釋放。這樣帶來的好處就是,內存可以及時得到回收,相對于堆來說,更加容易管理內存空間。
javascript中其他類型的數據被稱為引用類型的數據 : 如對象(Object)、數組(Array)、函數(Function) …,它們是通過拷貝和new出來的,這樣的數據存儲于堆中。其實,說存儲于堆中,也不太準確,因為,引用類型的數據的地址指針是存儲于棧中的,當我們想要訪問引用類型的值的時候,需要先從棧中獲得對象的地址指針,然后,在通過地址指針找到堆中的所需要的數據。
說來也是形象,棧,線性結構,后進先出,便于管理。堆,一個混沌,雜亂無章,方便存儲和開辟內存空間
傳值與傳址
var arr1 = [1,2,5,8]; var arr2 = arr1 ; var str1 = arr1[2]; console.log(arr2);//1,2,5,8 console.log(str1);//5 arr2[4] = 99; str1 = 6; console.log(arr1);//1,2,5,8,99 console.log(arr1[2]);//5
上方例子得知,當我改變arr2中的數據時,arr1中數據也發生了變化,當改變str1的數據值時,arr1卻沒有發生改變。為什么?這就是傳值與傳址的區別。
因為arr1是數組,屬于引用類型,所以它賦予給arr2的時候傳的是棧中的地址(相當于新建了一個不同名“指針”),而不是堆內存中的對象的值。str1得到的是一個基本類型的賦值,因此,str1僅僅是從arr1堆內存中獲取了一個數值,并直接保存在棧中。arr1、arr2都指向同一塊堆內存,arr2修改的堆內存的時候,也就會影響到arr1,str1是直接在棧中修改,并且不能影響到arr1堆內存中的數據。
淺拷貝和深拷貝
上邊說到的賦值方式就是淺拷貝,那么什么叫作深拷貝呢?就是要將arr1的每個基本類型的數據都遍歷一遍,依次的賦值給arr2的對應字段。避免產生因為地址引用帶來的問題。
var arr1 = [1,2,5,8]; var arr2 = []; for(var i=0;ijavascript面向對象的語言本身在處理對象和非對象上就進行了劃分,從數據結構的角度來講,對象就是棧的指針和堆中的數值。
本文內容借鑒自
鏈接:https://www.jianshu.com/p/5e0...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/96493.html
摘要:棧區由編譯器自動分配釋放,存放函數的參數值,局部變量的值等。其操作方式類似于數據結構中的棧。屬性返回對創建此對象的構造函數的引用。所有的和都是宿主對象參考高級程序設計堆和棧的概念和區別全面解析中的數據類型與類型轉換 數據類型 數據類型劃分 javascript中定義了6中基本數據類型(原始值類型),和一種復雜數據類型(引用類型),所謂復雜類型,其本質是由無序的名值對(key:val...
摘要:因此,所有在方法中定義的變量都是放在棧內存中的當我們在程序中創建一個對象時,這個對象將被保存到運行時數據區中,以便反復利用因為對象的創建成本通常較大,這個運行時數據區就是堆內存。 上一篇:《javascript高級程序設計》筆記:繼承近幾篇博客都會圍繞著圖中的知識點展開 showImg(https://segmentfault.com/img/bVY0C4?w=1330&h=618);...
摘要:堆內存主要作用是存放運行時創建的對象。堆內存用來存放由創建的對象和數組,在堆中分配的內存,由虛擬機的自動垃圾回收器來管理。這也是比較占內存的原因,實際上,棧中的變量指向堆內存中的變量,這就是中的指針 堆:(對象) 引用類型的變量,其內存分配在堆上或者常量池(字符串常量、基本數據類型常量),需要通過new等方式來創建。 堆內存主要作用是存放運行時創建(new)的對象。(主要用于存放對象,...
閱讀 1731·2023-04-25 23:43
閱讀 908·2021-11-24 09:39
閱讀 713·2021-11-22 15:25
閱讀 1711·2021-11-22 12:08
閱讀 1085·2021-11-18 10:07
閱讀 2067·2021-09-23 11:22
閱讀 3339·2021-09-22 15:23
閱讀 2470·2021-09-13 10:32