JavaScript中基本數(shù)據(jù)類型和引用數(shù)據(jù)類型的區(qū)別

1朱监、基本數(shù)據(jù)類型和引用數(shù)據(jù)類型

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è)值是基本類型值還是引用類型值蛤奢。

2鬼癣、常見的基本數(shù)據(jù)類型:

Number陶贼、String 、Boolean待秃、Null和Undefined拜秧。基本數(shù)據(jù)類型是按值訪問的章郁,因?yàn)榭梢灾苯硬僮鞅4嬖谧兞恐械膶?shí)際值枉氮。示例:

var a = 10;

var b = a;

b = 20;

console.log(a); // 10值

上面,b獲取的是a值得一份拷貝暖庄,雖然聊替,兩個(gè)變量的值相等,但是兩個(gè)變量保存了兩個(gè)不同的基本數(shù)據(jù)類型值培廓。

b只是保存了a復(fù)制的一個(gè)副本惹悄。所以,b的改變肩钠,對(duì)a沒有影響泣港。

下圖演示了這種基本數(shù)據(jù)類型賦值的過程:

3、引用類型數(shù)據(jù):

也就是對(duì)象類型Object type蔬将,比如:Object 爷速、Array 、Function 霞怀、Data等惫东。

javascript的引用數(shù)據(jù)類型是保存在堆內(nèi)存中的對(duì)象。

與其他語言的不同是毙石,你不可以直接訪問堆內(nèi)存空間中的位置和操作堆內(nèi)存空間廉沮。只能操作對(duì)象在棧內(nèi)存中的引用地址。

所以徐矩,引用類型數(shù)據(jù)在棧內(nèi)存中保存的實(shí)際上是對(duì)象在堆內(nèi)存中的引用地址滞时。通過這個(gè)引用地址可以快速查找到保存中堆內(nèi)存中的對(duì)象。

var obj1 = new Object();

var obj2 = obj1;

obj2.name = "Tom";

console.log(obj1.name); // Tom

說明這兩個(gè)引用數(shù)據(jù)類型指向了同一個(gè)堆內(nèi)存對(duì)象滤灯。obj1賦值給obj2坪稽,實(shí)際上這個(gè)堆內(nèi)存對(duì)象在棧內(nèi)存的引用地址復(fù)制了一份給了obj2,

但是實(shí)際上他們共同指向了同一個(gè)堆內(nèi)存對(duì)象鳞骤。實(shí)際上改變的是堆內(nèi)存對(duì)象窒百。

下面我們來演示這個(gè)引用數(shù)據(jù)類型賦值過程:

4、總結(jié)區(qū)別

a 聲明變量時(shí)不同的內(nèi)存分配:

1)原始值:存儲(chǔ)在棧(stack)中的簡(jiǎn)單數(shù)據(jù)段豫尽,也就是說篙梢,它們的值直接存儲(chǔ)在變量訪問的位置

這是因?yàn)檫@些原始類型占據(jù)的空間是固定的美旧,所以可將他們存儲(chǔ)在較小的內(nèi)存區(qū)域 – 棧中渤滞。這樣存儲(chǔ)便于迅速查尋變量的值贬墩。

2)引用值:存儲(chǔ)在堆(heap)中的對(duì)象,也就是說妄呕,存儲(chǔ)在變量處的值是一個(gè)指針(point)陶舞,指向存儲(chǔ)對(duì)象的內(nèi)存地址。

這是因?yàn)椋阂弥档拇笮?huì)改變绪励,所以不能把它放在棧中吊说,否則會(huì)降低變量查尋的速度。相反优炬,放在變量的棧空間中的值是該對(duì)象存儲(chǔ)在堆中的地址厅贪。

地址的大小是固定的蠢护,所以把它存儲(chǔ)在棧中對(duì)變量性能無任何負(fù)面影響。

b不同的內(nèi)存分配機(jī)制也帶來了不同的訪問機(jī)制

1)在javascript中是不允許直接訪問保存在堆內(nèi)存中的對(duì)象的养涮,所以在訪問一個(gè)對(duì)象時(shí)葵硕,

首先得到的是這個(gè)對(duì)象在堆內(nèi)存中的地址,然后再按照這個(gè)地址去獲得這個(gè)對(duì)象中的值贯吓,這就是傳說中的按引用訪問懈凹。

2)而原始類型的值則是可以直接訪問到的。

c 復(fù)制變量時(shí)的不同

1)原始值:在將一個(gè)保存著原始值的變量復(fù)制給另一個(gè)變量時(shí)悄谐,會(huì)將原始值的副本賦值給新變量介评,此后這兩個(gè)變量是完全獨(dú)立的,他們只是擁有相同的value而已爬舰。

2)引用值:在將一個(gè)保存著對(duì)象內(nèi)存地址的變量復(fù)制給另一個(gè)變量時(shí)们陆,會(huì)把這個(gè)內(nèi)存地址賦值給新變量,

也就是說這兩個(gè)變量都指向了堆內(nèi)存中的同一個(gè)對(duì)象情屹,他們中任何一個(gè)作出的改變都會(huì)反映在另一個(gè)身上坪仇。

(這里要理解的一點(diǎn)就是,復(fù)制對(duì)象時(shí)并不會(huì)在堆內(nèi)存中新生成一個(gè)一模一樣的對(duì)象垃你,只是多了一個(gè)保存指向這個(gè)對(duì)象指針的變量罷了)椅文。多了一個(gè)指針

d?參數(shù)傳遞的不同(把實(shí)參復(fù)制給形參的過程

首先我們應(yīng)該明確一點(diǎn):ECMAScript中所有函數(shù)的參數(shù)都是按值來傳遞的。

但是為什么涉及到原始類型與引用類型的值時(shí)仍然有區(qū)別呢惜颇?還不就是因?yàn)閮?nèi)存分配時(shí)的差別皆刺。

1)原始值:只是把變量里的值傳遞給參數(shù),之后參數(shù)和這個(gè)變量互不影響官还。

2)引用值:對(duì)象變量它里面的值是這個(gè)對(duì)象在堆內(nèi)存中的內(nèi)存地址芹橡,這一點(diǎn)你要時(shí)刻銘記在心!

因此它傳遞的值也就是這個(gè)內(nèi)存地址望伦,這也就是為什么函數(shù)內(nèi)部對(duì)這個(gè)參數(shù)的修改會(huì)體現(xiàn)在外部的原因了林说,因?yàn)樗鼈兌贾赶蛲粋€(gè)對(duì)象煎殷。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市腿箩,隨后出現(xiàn)的幾起案子豪直,更是在濱河造成了極大的恐慌,老刑警劉巖珠移,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件弓乙,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡钧惧,警方通過查閱死者的電腦和手機(jī)暇韧,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浓瞪,“玉大人懈玻,你說我怎么就攤上這事∏洌” “怎么了涂乌?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)英岭。 經(jīng)常有香客問我湾盒,道長(zhǎng),這世上最難降的妖魔是什么诅妹? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任罚勾,我火速辦了婚禮,結(jié)果婚禮上吭狡,老公的妹妹穿的比我還像新娘荧库。我一直安慰自己,他們只是感情好赵刑,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布分衫。 她就那樣靜靜地躺著,像睡著了一般般此。 火紅的嫁衣襯著肌膚如雪蚪战。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天铐懊,我揣著相機(jī)與錄音邀桑,去河邊找鬼。 笑死科乎,一個(gè)胖子當(dāng)著我的面吹牛壁畸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼捏萍,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼太抓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起令杈,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤走敌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后逗噩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體掉丽,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年异雁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了捶障。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡纲刀,死狀恐怖残邀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情柑蛇,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布驱闷,位于F島的核電站耻台,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏空另。R本人自食惡果不足惜盆耽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扼菠。 院中可真熱鬧摄杂,春花似錦、人聲如沸循榆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秧饮。三九已至映挂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間盗尸,已是汗流浹背柑船。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留泼各,地道東北人鞍时。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親逆巍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子及塘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容