亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

詳解JavaScript的內存空間、賦值和深淺拷貝

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

JavaScript的內存空間

在JavaScript中,每一個數據都需要一個內存空間。內存空間分為兩種,棧內存(stack)與堆內存(heap)

棧是系統自動分配的內存空間,由系統自動釋放,堆則是動態分配的內存,大小不定不會自動釋放。

基礎數據類型

JavaScript中的基礎數據類型,這些值都有固定的大小,保存在棧內存中,由系統自動分配存儲空間在棧內存空間的值,我們可以直接進行操作,因此基礎數據類型都是按照值訪問

在棧內存中的數據發生復制的行為時,系統會自動為新變量開辟一個新的內存空間,當復制執行后,兩個內存空間的值就互不影響,改變其中一個不會影響另一個

棧內存空間數據復制示例var a = `I am variable a`;var b = a; console.log(b); //`I am variable a`b = `I am variable b`;console.log(a); //`I am variable a`console.log(b); //`I am variable b`

引用數據類型

引用類型的值是保存在堆內存中的對象,在JavaScript中我們不能直接操作對象的堆內存空間。因為引用類型的值都是按引用訪問的,所以在操作對象時,實際上是操作對象的引用而不是實際的對象。引用可以理解為保存在棧內存中的一個地址,該地址指向堆內存中的一個實際對象

引用類型值的復制,系統會為新的變量自動分配一個新的棧內存空間這個棧內存空間保存著與被復制變量相同的指針,盡管他們在棧內存中的內存空間的位置互相獨立但是在堆內存中訪問到的對象實際上是同一個,因此,當我們改變其中一個對象的值時,實際上就是改變原來的對象

棧內存空間保存指針(地址),堆內存空間保存實際的對象,我們通過變量訪問對象時,實際上訪問的是對象的引用(地址)

內存中的棧區域存放變量(基本類型的變量包括變量聲明和值)以及指向堆區域存儲位置的指針(引用類型的變量包括變量聲明和指向內容的指針)

var a = {  name : `I am object a`,  type : 'object'}var b = a;console.log(b);// {name: "I am object a", type: "object"}b.name = `I am object b`;console.log(a);// {name: "I am object b", type: "object"}console.log(b);// {name: "I am object b", type: "object"}

基本類型總結

基本數據類型:

包括:null、undefined、number、string、boolean、symbol(es6)

存放位置:內存中的棧區域中

比較:值的比較,判斷是否相等,如果值相等,就相等。一般使用===進行比較,因為==會進行類型的轉換

拷貝:賦值(通過(=)賦值操作符 賦值),賦值完成后,兩個變量之間就沒有任何關系了,改變其中一個變量的值對另一個沒有任何影響

引用類型總結

引用數據類型:

包括:數組、對象、函數

存放位置:內存的棧區域中存放變量和指針,堆區域存儲實際的對象

比較:是引用的比較(就是地址的比較,變量在棧內存中對應的指針地址相等就指向同一個對象)判斷是否為同一個對象,示例如下

變量a和變量b的引用不同,對象就不是同一個對象var a = {name:'Jay'};var b = {name:'Jay'};a===b //false

我們對JavaScript中引用類型進行操作的時候,都是操作其對象的引用(保存在棧內存中的指針)

賦值、深拷貝和淺拷貝 (Assignment, deep copy and shallow copy)

賦值:兩個變量的值(指針)都指向同一個對象,改變其中一個,另一個也會受到影響

所謂拷貝就是復制,通過復制原對象生成一個新的對象

淺拷貝:重新在堆內存中開辟一個空間,拷貝后新對象獲得一個獨立的基本數據類型數據,和原對象共用一個原對象內的引用類型數據,改變基本類型數據,兩個對象互不影響,改變其中一個對象內的引用類型數據,另一個對象會受到影響

var obj = {  name: 'Jay Chou',  age: 32,  song:{    name:'發如雪',    year:2007  }}var obj1 = obj;function shallowCopy(obj){  var scObj = {};  for(var prop in obj){    if(obj.hasOwnProperty(prop)){      scObj[prop] = obj[prop]    }  }  return scObj;}var obj2 = shallowCopy(obj);console.log(obj === obj1,'obj === obj1','賦值');console.log(obj === obj2,'obj === obj2','淺拷貝');// true "obj === obj1" "賦值"// false "obj === obj2" "淺拷貝"console.log(obj.song === obj2.song);//trueobj2.song.name='雙截棍';obj2.name='Jay';console.log(obj)// {name: "Jay Chou", age: 32, song: {name:'雙截棍',year:2007}}console.log(obj1);// {name: "Jay Chou", age: 32, song: {name:'雙截棍',year:2007}}console.log(obj2);{name: "Jay", age: 32, song: {name:'雙截棍',year:2007}}console.log(obj===obj1)//trueconsole.log(obj===obj2)//false

深拷貝:不論是對象內的基本類型還是引用類型都被完全拷貝,拷貝后兩個對象互不影響

一種比較簡單實現方法是使用var dcObj = JSON.parse(JSON.stringify(obj))

var obj = {  name: 'Jay Chou',  age: 32,  song:{    name:'發如雪',    year:2007  }}var dcObj=JSON.parse(JSON.stringify(obj));console.log(dcObj);// {name: "Jay Chou", age: 32, song: {name:'發如雪',year:2007}}console.log(dcObj.song === obj.song);//falsedcObj.name='Jay';dcObj.song.name='雙截棍';console.log(obj);// {name: "Jay Chou", age: 32, song: {name:'發如雪',year:2007}}console.log(dcObj);//{name: "Jay", age: 32, song: {name:'雙截棍',year:2007}}

比較:賦值、深拷貝、淺拷貝

賦值:新對象仍然指向原對象,改變新對象的基本類型和引用類型的值都會使原對象對應的值一同改變

淺拷貝:改變新對象基本類型的值不會使原對象對應的值一起改變,但是改變新對象引用類型的值會使原對象對應的值一同改變

深拷貝:改變新對象基本類型和引用類型的值,都不會影響原對象,兩者互相獨立,互不影響

以上所述是小編給大家介紹的JavaScript的內存空間、賦值和深淺拷貝詳解整合,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VeVb武林網網站的支持!


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
韩国一区二区电影| 在线看福利67194| 亚洲白拍色综合图区| 97国产一区二区精品久久呦| 亚洲成人黄色网| 精品视频在线播放免| 国产精品日韩在线一区| 国产精品久久久| 亚洲福利在线播放| 日韩av一区二区在线观看| 中文字幕国产精品久久| 国产日产久久高清欧美一区| 97国产精品视频人人做人人爱| 性欧美在线看片a免费观看| 日韩亚洲欧美中文在线| 国产欧美精品久久久| 欧美丰满少妇xxxx| 亚洲视频在线免费观看| 国产精品久久久久久av福利| 亚洲第一网中文字幕| 九九热视频这里只有精品| 久久久电影免费观看完整版| 狠狠色噜噜狠狠狠狠97| 日韩亚洲在线观看| 欧美一级高清免费播放| 日本19禁啪啪免费观看www| 亚洲va久久久噜噜噜久久天堂| 日韩av电影在线网| 欧美日韩国产精品一区| 亚洲天堂免费视频| 色噜噜狠狠狠综合曰曰曰88av| 欧美亚洲国产视频| 精品久久久久国产| 久久亚洲国产成人| 精品久久久久久久久中文字幕| 日韩综合中文字幕| 国产精品一区=区| 热久久视久久精品18亚洲精品| 久久精品成人动漫| 亚洲毛茸茸少妇高潮呻吟| 麻豆国产精品va在线观看不卡| 精品久久久中文| 精品久久久久久久久久久久久久| 欧美高清videos高潮hd| 最近2019免费中文字幕视频三| 欧美久久久精品| 操人视频在线观看欧美| 在线观看国产精品日韩av| 亚洲成人精品视频在线观看| 国产精品久久久久久久久久新婚| 在线观看中文字幕亚洲| 日韩小视频在线| 九九精品视频在线观看| 亚洲电影免费观看高清完整版在线| 亚洲一区二区日本| 色综合伊人色综合网| 久久亚洲精品小早川怜子66| 伊人男人综合视频网| 亚洲国产精品推荐| 国产一区二中文字幕在线看| 日韩最新中文字幕电影免费看| 国产一区二区在线免费视频| 精品国产区一区二区三区在线观看| 日韩av免费在线看| 有码中文亚洲精品| 97视频com| 日韩精品免费视频| 国产精品入口夜色视频大尺度| 91久久久久久国产精品| 日韩欧美在线观看视频| 国产一区二区av| 日韩美女主播视频| 久久中文久久字幕| 91久热免费在线视频| 亚洲精品欧美极品| 亚洲一区二区三区乱码aⅴ蜜桃女| 国产日韩欧美在线看| 欧美色播在线播放| 亚洲一区二区三区成人在线视频精品| 欧美日韩国内自拍| 国产精品视频大全| 国语自产偷拍精品视频偷| 欧美在线视频导航| 国产精品久久久久久久天堂| 亚洲性生活视频在线观看| 日韩成人xxxx| 中文字幕日韩精品有码视频| 国产欧美精品一区二区三区-老狼| 国产成人91久久精品| 国产精品网红福利| 欧美人成在线视频| 日韩禁在线播放| 91久久久久久久| 国内精品久久久久| 精品国产成人av| 亚洲第一精品夜夜躁人人爽| 日韩精品视频观看| 欧美性xxxxx| 久久国内精品一国内精品| 成人妇女免费播放久久久| 日韩av在线免播放器| 久久精品免费电影| 国外成人在线视频| 国产成人一区二区三区| 日韩中文字幕在线视频播放| 国产精品视频区| 久久天天躁狠狠躁老女人| 久久激情视频免费观看| 日本一区二区在线免费播放| 国产视频欧美视频| 久久国产精品免费视频| 久久免费视频在线| 亚洲xxxx在线| 亚洲欧美激情视频| 亚洲成人亚洲激情| 91精品久久久久久久久久久久久久| 国产精品久久久久久久久影视| 国产精品色午夜在线观看| 色www亚洲国产张柏芝| 国产精品久久久久久久久久新婚| 日韩电影免费观看在线| 国产精品久久二区| 亚洲人高潮女人毛茸茸| 综合欧美国产视频二区| 亚洲国产成人91精品| 国产999精品久久久影片官网| 国产成人一区二区三区| 欧美疯狂xxxx大交乱88av| 欧美精品久久久久| 国产精品第一视频| 亚洲色图13p| 久久久国产精品一区| 久久国产精品99国产精| 日韩第一页在线| 国产欧美精品在线播放| 欧美激情精品久久久| 久久久久免费视频| 欧美老女人在线视频| 亚洲免费人成在线视频观看| 欧美黑人xxxⅹ高潮交| 成人免费淫片视频软件| 欧美电影免费观看电视剧大全| 日韩av不卡电影| 精品少妇一区二区30p| 亚洲男女性事视频| 久操成人在线视频| 欧美日韩久久久久| 在线精品国产成人综合| 裸体女人亚洲精品一区| 国产亚洲精品va在线观看| 97色在线观看免费视频| 性视频1819p久久| 91免费精品视频| 成人免费淫片aa视频免费| 久久精品视频播放| 亚洲精品综合精品自拍| 中文字幕欧美精品在线| 久久久久久97| 久久久久久高潮国产精品视| 国产精品一区二区三区在线播放| 欧美贵妇videos办公室| 欧美性受xxxx黑人猛交| 国产成人精彩在线视频九色| 日韩视频亚洲视频|