<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        JavaScript基礎心法 數據類型

        來源:懂視網 責編:小采 時間:2020-11-27 22:17:58
        文檔

        JavaScript基礎心法 數據類型

        JavaScript基礎心法 數據類型:由于自己是野生程序員,在剛開始學習程序設計的時候沒有在意內存這些基礎知識,導致后來在提到什么什么是存在棧中的,棧中只是存了一個引用這樣的話時總是一臉懵逼。 后來漸漸的了解了一些內存的知識,這部分還是非常有必要了解的。 基本數據結構 棧
        推薦度:
        導讀JavaScript基礎心法 數據類型:由于自己是野生程序員,在剛開始學習程序設計的時候沒有在意內存這些基礎知識,導致后來在提到什么什么是存在棧中的,棧中只是存了一個引用這樣的話時總是一臉懵逼。 后來漸漸的了解了一些內存的知識,這部分還是非常有必要了解的。 基本數據結構 棧

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

        隊列

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

        JavaScript中數據類型的存儲

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

        基本數據類型

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

      1. String
      2. Number
      3. Boolean
      4. Undefined
      5. Null
      6. Symbol(暫時不管)
      7. 基本數據類型都是一些簡單的數據段,它們是存儲在棧內存中。

        引用數據類型

        JavaScript中的引用數據類型有:

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

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

        圖解

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

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

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

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

        復制

        基本數據類型

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

        引用數據類型

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

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

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

        這有什么不同呢?

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

        為什么?

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

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

        參考文章

        理解js內存分配

        原始值和引用值

        在ECMAScript中,變量可以存放兩種類型的值,即原始值和引用值。
        原始值指的就是代表原始數據類型(基本數據類型)的值,即Undefined,Null,Number,String,Boolean類型所表示的值。
        引用值指的就是復合數據類型的值,即Object,Function,Array,以及自定義對象,等等

        棧和堆

        與原始值與引用值對應存在兩種結構的內存即棧和堆
        棧是一種后進先出的數據結構,在javascript中可以通過Array來模擬棧的行為

        原始值是存儲在棧中的簡單數據,也就是說,他們的值直接存儲在變量訪問的位置。

        堆是基于散列算法的數據結構,在javascript中,引用值是存放在堆中的。
        引用值是存儲在堆中的對象,也就是說,存儲在變量處的值(即指向對象的變量,存儲在棧中)是一個指針,指向存儲在堆中的實際對象.

        例:var obj = new Object(); obj存儲在棧中它指向于new Object()這個對象,而new Object()是存放在堆中的。

        那為什么引用值要放在堆中,而原始值要放在棧中,不都是在內存中嗎,為什么不放在一起呢?那接下來,讓我們來探索問題的答案!

        首先,我們來看一下代碼:

        function Person(id,name,age){
        this.id = id;
        this.name = name;
        this.age = age;
        }
        var num = 10;
        var bol = true;
        var str = "abc";
        var obj = new Object();
        var arr = ['a','b','c'];
        var person = new Person(100,"笨蛋的座右銘",25);

        然后我們來看一下內存分析圖:

        變量num,bol,str為基本數據類型,它們的值,直接存放在棧中,obj,person,arr為復合數據類型,他們的引用變量存儲在棧中,指向于存儲在堆中的實際對象。

        由上圖可知,我們無法直接操縱堆中的數據,也就是說我們無法直接操縱對象,但我們可以通過棧中對對象的引用來操作對象,就像我們通過遙控機操作電視機一樣,區別在于這個電視機本身并沒有控制按鈕。

        現在讓我們來回答為什么引用值要放在堆中,而原始值要放在棧中的問題:

        記住一句話:能量是守衡的,無非是時間換空間,空間換時間的問題

        堆比棧大,棧比堆的運算速度快,對象是一個復雜的結構,并且可以自由擴展,如:數組可以無限擴充,對象可以自由添加屬性。將他們放在堆中是為了不影響棧的效率。而是通過引用的方式查找到堆中的實際對象再進行操作。相對于簡單數據類型而言,簡單數據類型就比較穩定,并且它只占據很小的內存。不將簡單數據類型放在堆是因為通過引用到堆中查找實際對象是要花費時間的,而這個綜合成本遠大于直接從棧中取得實際值的成本。所以簡單數據類型的值直接存放在棧中。

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        JavaScript基礎心法 數據類型

        JavaScript基礎心法 數據類型:由于自己是野生程序員,在剛開始學習程序設計的時候沒有在意內存這些基礎知識,導致后來在提到什么什么是存在棧中的,棧中只是存了一個引用這樣的話時總是一臉懵逼。 后來漸漸的了解了一些內存的知識,這部分還是非常有必要了解的。 基本數據結構 棧
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲av无码一区二区三区在线播放| fc2成年免费共享视频18| 又粗又硬又大又爽免费视频播放| xxxxx做受大片视频免费| 亚洲毛片免费观看| 国产一级一片免费播放i| 久久精品国产免费一区| 亚洲精品久久无码av片俺去也| 自拍偷自拍亚洲精品被多人伦好爽 | 亚洲av综合av一区| 岛国av无码免费无禁网站| 日韩大片免费观看视频播放| 久久精品国产亚洲AV大全| 亚洲不卡无码av中文字幕| 四虎精品视频在线永久免费观看| 特a级免费高清黄色片| 亚洲精品电影天堂网| 亚洲国产精品人人做人人爽| 精品香蕉在线观看免费| 好湿好大好紧好爽免费视频| 中文字幕无码亚洲欧洲日韩| 亚洲AV中文无码乱人伦下载| 青青青青青青久久久免费观看| 香港a毛片免费观看 | aa级一级天堂片免费观看| 久久久久免费视频| 亚洲日本va一区二区三区| 亚洲一区二区三区首页 | 色偷偷噜噜噜亚洲男人| 亚洲黄色在线观看网站| 亚洲色一色噜一噜噜噜| 午夜视频免费观看| 午夜免费1000部| 99免费视频观看| 在线毛片片免费观看| 一级做受视频免费是看美女| 亚洲av最新在线观看网址| 亚洲中文字幕一二三四区苍井空| 亚洲AV人无码综合在线观看| 亚洲乳大丰满中文字幕| 亚洲午夜av影院|