引用類(lèi)型和對(duì)象拷貝

引用類(lèi)型有哪些胶逢?非引用類(lèi)型有哪些?

  • 引用類(lèi)型是指那些保存在堆內(nèi)存中的對(duì)象吟秩。變量中保存的實(shí)際上只是一個(gè)指針,這個(gè)指針指向內(nèi)存中的另一個(gè)位置厕隧,由該位置保存對(duì)象。
  • 引用類(lèi)型有:對(duì)象俄周、函數(shù)吁讨、數(shù)組、正則表達(dá)式
  • 非引用類(lèi)型有: string,number,boolean,undefined和null

如下代碼輸出什么峦朗?為什么?

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);// false建丧,因?yàn)閷?duì)象是引用類(lèi)型,他們的變量保存的只是存儲(chǔ)著相同對(duì)象的地址波势,這個(gè)地址是不相同的
console.log(obj1 = obj2);//返回{a:1,b:2}翎朱,相當(dāng)于將obj2的指針傳遞給obj1,obj1也指向了obj2的堆內(nèi)存空間
console.log(obj1 == obj2);// true艰亮,因?yàn)樗麄兊闹羔樝嗤蒸妫灾赶虻亩褍?nèi)存空間也相同

如下代碼輸出什么? 為什么

var a = 1
var b = 2
var c = { name: '饑人谷', age: 2 }
var d = [a, b, c]

var aa = a
var bb = b
var cc = c
var dd = d

a = 11
b = 22
c.name = 'hello'
d[2]['age'] = 3

console.log(aa) //1,aa會(huì)開(kāi)辟自己的棧空間
console.log(bb) //2迄埃,bb會(huì)開(kāi)啟自己的椓圃希空間
console.log(cc) //{name:'hello',age: 2}對(duì)象c和cc都是引用類(lèi)型,他們的指針指向同一個(gè)堆內(nèi)存空間侄非,改變其中任何一個(gè)都會(huì)改變他們共享的堆內(nèi)存空間蕉汪。
console.log(dd) //{1,2,{name:'hello',age:3}}跟上述的回答相同

如下代碼輸出什么? 為什么

var a = 1
var c = { name: 'jirengu', age: 2 }

function f1(n){
  ++n
}
function f2(obj){
  ++obj.age
}

f1(a) 
f2(c) 
f1(c.age) 
console.log(a) //輸出1,因?yàn)閍是原始類(lèi)型,改變n的值不會(huì)影響到a
console.log(c) //輸出{name:'jirengu',age:3}流译,因?yàn)閒2(c)的執(zhí)行,會(huì)使obj中的age自增1變?yōu)?者疤,f1(c.age)不影響obj中的age福澡,因?yàn)樗皇前裲bj中的值傳給了參數(shù),這個(gè)值是原始類(lèi)型。
其實(shí)最簡(jiǎn)單的判斷方法就是觀察傳遞給函數(shù)的參數(shù)是原始類(lèi)型還是引用類(lèi)型驹马,
如果是原始類(lèi)型革砸,那么不會(huì)影響到原來(lái)的原始類(lèi)型,如果是引用類(lèi)型糯累,那么原來(lái)的引用類(lèi)型里的值也會(huì)改變算利。

過(guò)濾如下數(shù)組,只保留正數(shù)泳姐,直接在原數(shù)組上操作

var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
  for(var i = 0;i<arr.length;i++){
    if(arr[i]<=0){
      arr.splice(i,1);
      i--;
    }
  }
  return arr;
}
filter(arr)
console.log(arr) // [3,1,2]

過(guò)濾如下數(shù)組效拭,只保留正數(shù),原數(shù)組不變胖秒,生成新數(shù)組

var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
      var arr2 = [];
      for(var i = 0;i<arr.length;i++){
        if(arr[i]>0){
          arr2.push(arr[i])
        }
      }
      return arr2
     }
var arr2 = filter(arr)
console.log(arr2) // [3,1,2]
console.log(arr)  // [3,1,0,-1,-2,2,-5]

寫(xiě)一個(gè)深拷貝函數(shù)缎患,用兩種方式實(shí)現(xiàn)

第一種
function deepCopy(obj){
   var obj1={}
   for(var i in obj){
     if(obj.hasOwnProperty(i)){
       if(typeof obj[i]==="number"||"boolean"||"string"|| undefined || null){
         obj1[i]=obj[i];
       }
       else{
         obj1[i]=deepCopy(obj[i]);
       }
     }
   }
   return obj1;
}


第二種
function(obj){
  var objCopy=JSON.parse(stringify(obj));
  return objCopy;
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市阎肝,隨后出現(xiàn)的幾起案子挤渔,更是在濱河造成了極大的恐慌,老刑警劉巖风题,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚂蕴,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡俯邓,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén)熔号,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)稽鞭,“玉大人,你說(shuō)我怎么就攤上這事引镊‰蹋” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵弟头,是天一觀的道長(zhǎng)吩抓。 經(jīng)常有香客問(wèn)我,道長(zhǎng)赴恨,這世上最難降的妖魔是什么疹娶? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮伦连,結(jié)果婚禮上雨饺,老公的妹妹穿的比我還像新娘钳垮。我一直安慰自己,他們只是感情好额港,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布饺窿。 她就那樣靜靜地躺著,像睡著了一般移斩。 火紅的嫁衣襯著肌膚如雪肚医。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,155評(píng)論 1 299
  • 那天向瓷,我揣著相機(jī)與錄音肠套,去河邊找鬼。 笑死风罩,一個(gè)胖子當(dāng)著我的面吹牛糠排,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播超升,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼入宦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了室琢?” 一聲冷哼從身側(cè)響起乾闰,我...
    開(kāi)封第一講書(shū)人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎盈滴,沒(méi)想到半個(gè)月后涯肩,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巢钓,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年病苗,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片症汹。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡硫朦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出背镇,到底是詐尸還是另有隱情咬展,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布瞒斩,位于F島的核電站破婆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏胸囱。R本人自食惡果不足惜祷舀,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧蔑鹦,春花似錦夺克、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至哟忍,卻和暖如春狡门,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锅很。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工其馏, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人爆安。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓叛复,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親扔仓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子褐奥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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