• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關(guān)鍵字專題1關(guān)鍵字專題50關(guān)鍵字專題500關(guān)鍵字專題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關(guān)鍵字專題關(guān)鍵字專題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
    當(dāng)前位置: 首頁 - 科技 - 知識(shí)百科 - 正文

    JavaScript基礎(chǔ)心法 數(shù)據(jù)類型

    來源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:17:58
    文檔

    JavaScript基礎(chǔ)心法 數(shù)據(jù)類型

    JavaScript基礎(chǔ)心法 數(shù)據(jù)類型:由于自己是野生程序員,在剛開始學(xué)習(xí)程序設(shè)計(jì)的時(shí)候沒有在意內(nèi)存這些基礎(chǔ)知識(shí),導(dǎo)致后來在提到什么什么是存在棧中的,棧中只是存了一個(gè)引用這樣的話時(shí)總是一臉懵逼。 后來漸漸的了解了一些內(nèi)存的知識(shí),這部分還是非常有必要了解的。 基本數(shù)據(jù)結(jié)構(gòu) 棧
    推薦度:
    導(dǎo)讀JavaScript基礎(chǔ)心法 數(shù)據(jù)類型:由于自己是野生程序員,在剛開始學(xué)習(xí)程序設(shè)計(jì)的時(shí)候沒有在意內(nèi)存這些基礎(chǔ)知識(shí),導(dǎo)致后來在提到什么什么是存在棧中的,棧中只是存了一個(gè)引用這樣的話時(shí)總是一臉懵逼。 后來漸漸的了解了一些內(nèi)存的知識(shí),這部分還是非常有必要了解的。 基本數(shù)據(jù)結(jié)構(gòu) 棧

    堆是基于散列算法的數(shù)據(jù)結(jié)構(gòu)。

    隊(duì)列

    隊(duì)列是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu)。

    JavaScript中數(shù)據(jù)類型的存儲(chǔ)

    JavaScript中將數(shù)據(jù)類型分為基本數(shù)據(jù)類型和引用數(shù)據(jù)類型,它們其中有一個(gè)區(qū)別就是存儲(chǔ)的位置不同。

    基本數(shù)據(jù)類型

    我們都知道JavaScript中的基本數(shù)據(jù)類型有:

  • String
  • Number
  • Boolean
  • Undefined
  • Null
  • Symbol(暫時(shí)不管)
  • 基本數(shù)據(jù)類型都是一些簡(jiǎn)單的數(shù)據(jù)段,它們是存儲(chǔ)在棧內(nèi)存中。

    引用數(shù)據(jù)類型

    JavaScript中的引用數(shù)據(jù)類型有:

  • Array
  • Object
  • 引用數(shù)據(jù)類型是保存在堆內(nèi)存中的,然后再棧內(nèi)存中保存一個(gè)對(duì)堆內(nèi)存中實(shí)際對(duì)象的引用。所以,JavaScript中對(duì)引用數(shù)據(jù)類型的操作都是操作對(duì)象的引用而不是實(shí)際的對(duì)象。

    可以理解為,棧內(nèi)存中保存了一個(gè)地址,這個(gè)地址和堆內(nèi)存中的實(shí)際值是相關(guān)的。

    圖解

    現(xiàn)在,我們聲明幾個(gè)變量試試:

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

    可以通過下圖來表示數(shù)據(jù)類型在內(nèi)存中的存儲(chǔ)情況:

    此時(shí)name,age,job三種基本數(shù)據(jù)類型是直接存在棧內(nèi)存中的,而arr,obj在棧內(nèi)存中只是存了一個(gè)地址來表示對(duì)堆內(nèi)存中的引用。

    復(fù)制

    基本數(shù)據(jù)類型

    對(duì)于基本數(shù)據(jù)類型,如果進(jìn)行復(fù)制,系統(tǒng)會(huì)自動(dòng)為新的變量在棧內(nèi)存中分配一個(gè)新值,很容易理解。

    引用數(shù)據(jù)類型

    如果對(duì)于數(shù)組、對(duì)象這樣的引用數(shù)據(jù)類型而言,復(fù)制的時(shí)候就會(huì)有所區(qū)別了:

    系統(tǒng)也會(huì)自動(dòng)為新的變量在棧內(nèi)存中分配一個(gè)值,但這個(gè)值僅僅是一個(gè)地址。也就是說,復(fù)制出來的變量和原有的變量具有相同的地址值,指向堆內(nèi)存中的同一個(gè)對(duì)象。

    如果所示,執(zhí)行了var objCopy=obj之后,obj和objCopy具有相同的地址值,執(zhí)行堆內(nèi)存中的同一個(gè)實(shí)際對(duì)象。

    這有什么不同呢?

    當(dāng)我修改obj或objCopy時(shí),都會(huì)引起另一個(gè)變量的改變。

    為什么?

    為什么基礎(chǔ)數(shù)據(jù)類型存在棧中,而引用數(shù)據(jù)類型存在堆中呢?

    1. 堆比棧大,棧比對(duì)速度快。
    2. 基礎(chǔ)數(shù)據(jù)類型比較穩(wěn)定,而且相對(duì)來說占用的內(nèi)存小。
    3. 引用數(shù)據(jù)類型大小是動(dòng)態(tài)的,而且是無限的。
    4. 堆內(nèi)存是無序存儲(chǔ),可以根據(jù)引用直接獲取。

    參考文章

    理解js內(nèi)存分配

    原始值和引用值

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

    棧和堆

    與原始值與引用值對(duì)應(yīng)存在兩種結(jié)構(gòu)的內(nèi)存即棧和堆
    棧是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),在javascript中可以通過Array來模擬棧的行為

    原始值是存儲(chǔ)在棧中的簡(jiǎn)單數(shù)據(jù),也就是說,他們的值直接存儲(chǔ)在變量訪問的位置。

    堆是基于散列算法的數(shù)據(jù)結(jié)構(gòu),在javascript中,引用值是存放在堆中的。
    引用值是存儲(chǔ)在堆中的對(duì)象,也就是說,存儲(chǔ)在變量處的值(即指向?qū)ο蟮淖兞?,存?chǔ)在棧中)是一個(gè)指針,指向存儲(chǔ)在堆中的實(shí)際對(duì)象.

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

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

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

    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);

    然后我們來看一下內(nèi)存分析圖:

    變量num,bol,str為基本數(shù)據(jù)類型,它們的值,直接存放在棧中,obj,person,arr為復(fù)合數(shù)據(jù)類型,他們的引用變量存儲(chǔ)在棧中,指向于存儲(chǔ)在堆中的實(shí)際對(duì)象。

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

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

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

    堆比棧大,棧比堆的運(yùn)算速度快,對(duì)象是一個(gè)復(fù)雜的結(jié)構(gòu),并且可以自由擴(kuò)展,如:數(shù)組可以無限擴(kuò)充,對(duì)象可以自由添加屬性。將他們放在堆中是為了不影響棧的效率。而是通過引用的方式查找到堆中的實(shí)際對(duì)象再進(jìn)行操作。相對(duì)于簡(jiǎn)單數(shù)據(jù)類型而言,簡(jiǎn)單數(shù)據(jù)類型就比較穩(wěn)定,并且它只占據(jù)很小的內(nèi)存。不將簡(jiǎn)單數(shù)據(jù)類型放在堆是因?yàn)橥ㄟ^引用到堆中查找實(shí)際對(duì)象是要花費(fèi)時(shí)間的,而這個(gè)綜合成本遠(yuǎn)大于直接從棧中取得實(shí)際值的成本。所以簡(jiǎn)單數(shù)據(jù)類型的值直接存放在棧中。

    聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    JavaScript基礎(chǔ)心法 數(shù)據(jù)類型

    JavaScript基礎(chǔ)心法 數(shù)據(jù)類型:由于自己是野生程序員,在剛開始學(xué)習(xí)程序設(shè)計(jì)的時(shí)候沒有在意內(nèi)存這些基礎(chǔ)知識(shí),導(dǎo)致后來在提到什么什么是存在棧中的,棧中只是存了一個(gè)引用這樣的話時(shí)總是一臉懵逼。 后來漸漸的了解了一些內(nèi)存的知識(shí),這部分還是非常有必要了解的。 基本數(shù)據(jù)結(jié)構(gòu) 棧
    推薦度:
    • 熱門焦點(diǎn)

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 国产精品视频一区二区三区四| 亚洲国产精品国自产拍电影| 日韩精品免费在线视频| 亚洲国产精品福利片在线观看| 国产精品亚洲欧美大片在线观看| av国内精品久久久久影院| 一本色道久久88精品综合| 久久精品无码一区二区app| 青草青草久热精品视频在线网站| 久久久久女人精品毛片| 亚洲欧美日韩国产精品影院| 国产一区二区三区在线观看精品 | 精品人妻少妇一区二区三区在线| 国产精品一级香蕉一区| 国产精品日韩AV在线播放| 亚洲国产精品va在线播放| 亚洲国产精品一区二区九九| 精品国产爽爽AV| 精品国偷自产在线视频| 亚洲欧美日韩精品永久在线| 国产91精品在线观看| 99久久久国产精品免费无卡顿| 精品人伦一区二区三区潘金莲| 精品卡一卡二卡乱码高清| 好属妞这里只有精品久久| 久久久久无码精品国产不卡| 亚洲精品无码AV中文字幕电影网站| 久久99精品久久久久久水蜜桃| 国产精品国产三级在线高清观看| 亚洲国产精品免费视频| 精品国产自在在线在线观看| 国产精品国产三级国产专播| 2048亚洲精品国产| 国产成人精品天堂| 国语自产拍精品香蕉在线播放| 国内精品51视频在线观看| 国产精品亚洲片夜色在线| 2022国产精品最新在线| 国产A∨免费精品视频| 精品国产青草久久久久福利| 色偷偷88欧美精品久久久|