国产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
當前位置: 首頁 - 科技 - 知識百科 - 正文

js基礎心法之數據類型

來源:懂視網 責編:小采 時間:2020-11-27 19:30:11
文檔

js基礎心法之數據類型

js基礎心法之數據類型:一個很基礎的知識點,這篇主要是介紹JavaScript中基本數據類型和引用數據類型是如何存儲的,需要的朋友可以參考下由于自己是野生程序員,在剛開始學習程序設計的時候沒有在意內存這些基礎知識,導致后來在提到什么什么是存在棧中的,棧中只是存了一個引用
推薦度:
導讀js基礎心法之數據類型:一個很基礎的知識點,這篇主要是介紹JavaScript中基本數據類型和引用數據類型是如何存儲的,需要的朋友可以參考下由于自己是野生程序員,在剛開始學習程序設計的時候沒有在意內存這些基礎知識,導致后來在提到什么什么是存在棧中的,棧中只是存了一個引用

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

隊列

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

JavaScript中數據類型的存儲

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

基本數據類型

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

  • String

  • Number

  • Boolean

  • Undefined

  • Null

  • Symbol(暫時不管)

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

    引用數據類型

    JavaScript中的引用數據類型有:

  • Array

  • Object

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

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

    圖解

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

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

    此時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()是存放在堆中的。

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

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

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

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

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

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

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

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

    總結:

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

    文檔

    js基礎心法之數據類型

    js基礎心法之數據類型:一個很基礎的知識點,這篇主要是介紹JavaScript中基本數據類型和引用數據類型是如何存儲的,需要的朋友可以參考下由于自己是野生程序員,在剛開始學習程序設計的時候沒有在意內存這些基礎知識,導致后來在提到什么什么是存在棧中的,棧中只是存了一個引用
    推薦度:
    標簽: js 類型 基礎
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 精品视频免费看 | 在线 v亚洲 v欧美v 专区 | 欧美高清性xxxxxxx | 欧美福利一区二区三区 | 日本韩国欧美一区 | 日韩在线二区 | 色婷婷综合久久久久中文一区二区 | 国产边打电话边做对白刺激 | 久久久久久久一精品 | 亚洲视频在线观 | 五月婷婷在线观看 | 国产亚洲欧美一区二区 | 日韩国产免费一区二区三区 | 亚洲欧美中文日韩在线v日本 | 欧美综合图区亚洲综合图区 | 国产一区二区福利久久 | 亚洲精彩视频在线观看 | 久久一卡二卡 | 欧美区一区二区三 | 天天躁夜夜躁狠狠躁躁88 | 国产精品久久久久影院色 | a一区二区三区视频 | 日本一二区视频 | 国产高清视频免费 | 欧美日韩精品国产一区二区 | 日韩欧美一区二区三区四区 | 日日夜夜天天干 | 免费一区二区三区在线视频 | 国产区在线观看 | 亚洲 欧美 中文字幕 | 欧美高清视频在线观看 | 国产成人一区二区 | 91精品国产综合久久久久久 | 国内精品久久久久久久久 | 国产又黄又爽的视频 | 成人毛片一区二区三区 | 久久99网站 | 亚洲天堂一区二区三区 | 亚洲欧美日韩精品永久在线 | 亚洲欧美日韩中文无线码 | 日韩精品免费观看 |