javascript
惊呼!JavaScript基本数据类型和引用数据类型详解
前言
我是歌謠 知其然知其所以然 人人都有一個(gè)大廠夢(mèng) 希望通過自己的一個(gè)總結(jié)分享可以給予大家?guī)?lái)幫助和提升。
本期知識(shí)點(diǎn)
JavaScript中基本數(shù)據(jù)類型和引用數(shù)據(jù)類型
目標(biāo)
定義
ECMAScript包括兩個(gè)不同類型的值:基本數(shù)據(jù)類型和引用數(shù)據(jù)類型。
基本數(shù)據(jù)類型指的是簡(jiǎn)單的數(shù)據(jù)段,引用數(shù)據(jù)類型指的是有多個(gè)值構(gòu)成的對(duì)象。
當(dāng)我們把變量賦值給一個(gè)變量時(shí),解析器首先要確認(rèn)的就是這個(gè)值是基本類型值還是引用類型值。
常見的數(shù)據(jù)類型
基本數(shù)據(jù)類型
- Sting
- Number
- Boolean
- null
- undefined
- Symbol
引用數(shù)據(jù)類型
- Object
- Date
- function
- RegExp
- Array …
棧內(nèi)存(stack)
棧內(nèi)存:是一種特殊的線性表,它具有后進(jìn)先出的特性,存放基本類型。
堆內(nèi)存(heap)
區(qū)別
1復(fù)制變量時(shí)的不同
對(duì)于基本類型來(lái)說(shuō),一般會(huì)在變量對(duì)象上創(chuàng)建一個(gè)新值,然后把這個(gè)值復(fù)制到為新變量分配的類型上面
對(duì)于引用類型來(lái)說(shuō),也會(huì)將存儲(chǔ)在變量對(duì)象的值復(fù)制一份到新變量的內(nèi)存空間中,但是這個(gè)值的副本其實(shí)是一個(gè)指針,這個(gè)指針指向我們被賦值的對(duì)象,即不管怎么樣,引用類型的賦值其實(shí)都是引用的同一個(gè)對(duì)象
2參數(shù)傳遞的不同
首先我們應(yīng)該明確一點(diǎn):ECMAScript中所有函數(shù)的參數(shù)都是按值來(lái)傳遞的。
原始值:只是把變量里的值傳遞給參數(shù),之后參數(shù)和這個(gè)變量互不影響。
引用值:對(duì)象變量它里面的值是這個(gè)對(duì)象在堆內(nèi)存中的內(nèi)存地址,因此它傳遞的值也就是這個(gè)內(nèi)存地址,這也就是為什么函數(shù)內(nèi)部對(duì)這個(gè)參數(shù)的修改會(huì)體現(xiàn)在外部的原因了,因?yàn)樗鼈兌贾赶蛲粋€(gè)對(duì)象。
3聲明變量時(shí)不同的內(nèi)存分配:
原始值:存儲(chǔ)在棧(stack)中的簡(jiǎn)單數(shù)據(jù)段,也就是說(shuō),它們的值直接存儲(chǔ)在變量訪問的位置。
引用值:存儲(chǔ)在堆(heap)中的對(duì)象,也就是說(shuō),存儲(chǔ)在變量處的值是一個(gè)指針(point),指向存儲(chǔ)對(duì)象的內(nèi)存地址。
檢測(cè)方法
可以通過typeof檢測(cè)基本類型和復(fù)雜類型,不過檢測(cè)出來(lái)的復(fù)雜類型都是Object,如果想要檢測(cè)復(fù)雜類型可以通過 instanceof
語(yǔ)法:object instanceof constructor
總結(jié)
面試中經(jīng)常會(huì)問我們基本數(shù)據(jù)類型有哪些
我是歌謠 放棄很容易 堅(jiān)持一定很酷 純屬個(gè)人總結(jié) 若有不合理之處 可選擇性關(guān)閉網(wǎng)頁(yè) 歡迎討論
下一期預(yù)計(jì)開始講解原型和原型鏈部分 敬請(qǐng)期待
總結(jié)
以上是生活随笔為你收集整理的惊呼!JavaScript基本数据类型和引用数据类型详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [html] 说说你对H5的Servi
- 下一篇: 电感介绍