国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

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

2024-05-06 16:38:30
字體:
來源:轉載
供稿:網友

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

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

引用類型:這類值存儲在堆(heap)中,堆是內存中的動態區域,相當于自留空間,在程序運行期間會動態分配給代碼和堆棧。

堆中存儲的一般都是對象,然后通過一個編號傳遞給棧內變量,這個編號就是所謂的引用指針(point),這樣變量和變量值之間是分離的,它們通過指針相聯系。當讀寫數據時,計算機通過變量的指針找到堆中的數據塊,并進行操作。

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

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)

我預期的 arr 的結果應該是

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

最后arr的結果居然是這樣的

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

在一個基友群里問,最后終于自己得出結論了——這是因為值類型和引用類型不同的原因。

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

值類型:數值、布爾值、null、undefined

引用類型:對象、數組、函數

我們例子中的obj雖然每次打印出來都是不同的,但是因為是引用類型,arr也是引用類型,即使obj  push到arr里面了,也只是push進去了一個內存地址而已,所以最后obj變成3了,arr里面引用的obj也會全部變成3。很神奇吧,最后解決的辦法也很簡單

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的聲明放在最內層的循環里面,每次循環都會是單獨的一個內存地址,這樣最后的obj即使變成了3,前面的obj也不會被影響到,因為他們的內存地址根部不同。

以上所述是小編給大家介紹的JavaScript 值類型和引用類型的初次研究(推薦),希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 高陵县| 普兰县| 渭源县| 怀来县| 阜新市| 大化| 灵石县| 恩平市| 通化县| 沾益县| 德令哈市| 金乡县| 连平县| 冀州市| 偃师市| 通江县| 五莲县| 霍林郭勒市| 麻城市| 东辽县| 河曲县| 海晏县| 赤壁市| 两当县| 克什克腾旗| 霍邱县| 宁津县| 正安县| 洪洞县| 南丹县| 鄯善县| 宁阳县| 苏尼特右旗| 鹿邑县| 乌兰浩特市| 甘孜| 宕昌县| 宁波市| 泸水县| 维西| 龙胜|