国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答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中的基本數據類型有:

  • 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};

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

    此時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
    主站蜘蛛池模板: 国产一区二区三区在线 | 免费观看a黄一级视频 | 91免费高清无砖码区 | 亚洲欧美日韩综合在线 | 国产精品va在线观看一 | 亚洲国产精品婷婷久久久久 | 国产高清美女一级a毛片久久 | 一本综合久久国产二区 | 91大神在线观看精品一区 | 国产高清美女一级a毛片 | 图片区 日韩 欧美 亚洲 | 欧美第3页 | 欧美日韩国产在线播放 | 日韩精品一区二区三区国语自制 | 国产未成女年一区二区 | 自拍 欧美 在线 综合 另类 | 国产偷自拍 | 精品视频一区二区三区四区五区 | 毛片一区 | 亚洲欧美日韩精品久久久 | 性夜影院爽黄a爽免费看网站 | 中文字幕第一区 | 国产a视频 | 欧美专区日韩 | 一道精品一区二区三区 | 久久经典视频 | 卡通动漫亚洲综合 | 国语对白一区二区三区 | 广东东莞一级毛片免费 | 欧美高清第一页 | 亚洲一区二区三区精品视频 | 在线中文| 视频精品一区二区三区 | 久久99国产精一区二区三区 | 国产最新在线视频 | 久久香蕉国产线看观看乱码 | 色综合天天娱乐综合网 | 亚洲欧美另类第一页 | 在线另类 | 日韩成人免费在线 | 欧美性野久久久久久久久 |