JavaScript值類型和引用類型的初次研究(推薦)

值類型:也稱為原始數(shù)據(jù)或原始值(primitive value)。

創(chuàng)新互聯(lián)于2013年成立,先為新蔡等服務(wù)建站,新蔡等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢服務(wù)。為新蔡企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。

這類值存儲(chǔ)在棧(stack)中,棧是內(nèi)存中一種特殊的數(shù)據(jù)結(jié)構(gòu),也稱為線性表,棧按照后進(jìn)先出的原則存儲(chǔ)數(shù)據(jù),先進(jìn)入的數(shù)據(jù)被壓入棧底,最后插入(push)的數(shù)據(jù)放在棧頂,需要讀取數(shù)據(jù)時(shí)從棧頂開始彈出(pop)數(shù)據(jù),即最后一個(gè)數(shù)據(jù)被第一個(gè)讀出來。因此說,值類型都是簡(jiǎn)單的數(shù)據(jù)段。變量的位置和變量值的位置是重疊的,也就是說值類型的數(shù)據(jù)被存儲(chǔ)在變量被訪問的位置。

引用類型:這類值存儲(chǔ)在堆(heap)中,堆是內(nèi)存中的動(dòng)態(tài)區(qū)域,相當(dāng)于自留空間,在程序運(yùn)行期間會(huì)動(dòng)態(tài)分配給代碼和堆棧。

堆中存儲(chǔ)的一般都是對(duì)象,然后通過一個(gè)編號(hào)傳遞給棧內(nèi)變量,這個(gè)編號(hào)就是所謂的引用指針(point),這樣變量和變量值之間是分離的,它們通過指針相聯(lián)系。當(dāng)讀寫數(shù)據(jù)時(shí),計(jì)算機(jī)通過變量的指針找到堆中的數(shù)據(jù)塊,并進(jìn)行操作。

今天遇到一個(gè)坑,具體的不多說,直接上代碼

var a = [ [],[],[1,2,3] ]
var b = ['顏色','大小','尺寸']
var arr = []
for(let i = 0; i < a.length; i ++){
  let obj = {}
  for(let j = 0; j < a[i].length; j ++){
    obj[b[i]] = a[i][j]
    arr.push(obj)
    console.log(arr)
    console.log(obj)
  }

}
console.log(arr)

我預(yù)期的 arr 的結(jié)果應(yīng)該是

[ { '尺寸': 1 }, { '尺寸': 2 }, { '尺寸': 3 } ]

最后arr的結(jié)果居然是這樣的

[ { '尺寸': 3 }, { '尺寸': 3 }, { '尺寸': 3 } ]

在一個(gè)基友群里問,最后終于自己得出結(jié)論了——這是因?yàn)橹殿愋秃鸵妙愋筒煌脑颉?/p>

在JavaScript里的值大概分為兩種,一種是值類型,一種是引用類型。

值類型:數(shù)值、布爾值、null、undefined

引用類型:對(duì)象、數(shù)組、函數(shù)

我們例子中的obj雖然每次打印出來都是不同的,但是因?yàn)槭且妙愋?,arr也是引用類型,即使obj  push到arr里面了,也只是push進(jìn)去了一個(gè)內(nèi)存地址而已,所以最后obj變成3了,arr里面引用的obj也會(huì)全部變成3。很神奇吧,最后解決的辦法也很簡(jiǎn)單

var a = [ [],[],[1,2,3] ]
var b = ['顏色','大小','尺寸']
var arr = []
for(let i = 0; i < a.length; i ++){
  for(let j = 0; j < a[i].length; j ++){
  let obj = {}
    obj[b[i]] = a[i][j]
    arr.push(obj)
  }
}
console.log(arr)

只要把obj的聲明放在最內(nèi)層的循環(huán)里面,每次循環(huán)都會(huì)是單獨(dú)的一個(gè)內(nèi)存地址,這樣最后的obj即使變成了3,前面的obj也不會(huì)被影響到,因?yàn)樗麄兊膬?nèi)存地址根部不同。

以上所述是小編給大家介紹的JavaScript 值類型和引用類型的初次研究(推薦),希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)創(chuàng)新互聯(lián)網(wǎng)站的支持!

文章標(biāo)題:JavaScript值類型和引用類型的初次研究(推薦)
URL網(wǎng)址:http://muchs.cn/article2/gdsgic.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供電子商務(wù)、網(wǎng)站改版、網(wǎng)站排名App設(shè)計(jì)、網(wǎng)站策劃、移動(dòng)網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都做網(wǎng)站