引用類型對象拷貝(進階4作業(yè))

1.引用類型有哪些?非引用類型有哪些

  • 基本類型值(數(shù)值杨伙、布爾值形庭、null和undefined):指的是保存在棧內(nèi)存中的簡單數(shù)據(jù)段箩溃;
  • 引用類型值(對象路媚、數(shù)組熊赖、函數(shù)堵漱、正則):指的是那些保存在堆內(nèi)存中的對象周拐,變量中保存的實際上只是一個指針遗增,這個指針執(zhí)行內(nèi)存中的另一個位置执解,由該位置保存對象。

2.如下代碼輸出什么哲身?為什么

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
console.log(obj1 = obj2);
console.log(obj1 == obj2);

console.log(obj1 == obj2);
輸出false,因為兩個引用類型的值雖然內(nèi)容一樣但指向不同的對象贸伐,指針不相等勘天。
console.log(obj1 = obj2);
輸出[object Object] { a: 1, b: 2},相當于把obj2的指針賦值給obj1捉邢,再輸出指針指向的對象脯丝。
console.log(obj1 == obj2);
輸出true,由于上句中已經(jīng)把obj2的指針賦值給obj1伏伐,故此時兩者指向同一位置宠进,指針相同,故輸出true藐翎。

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

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) 
console.log(bb) 
console.log(cc)
console.log(dd)

console.log(aa)
輸出1材蹬,因為a把它的值1賦給了aa,aa是基本類型值不隨a的值變化而變化吝镣。
console.log(bb)
輸出2堤器,理由同上。
console.log(cc)
輸出[object Object] { name: 'hello', age: 3 }末贾,因為c是引用類型值闸溃,c與cc指向同一個值,c變化了cc跟著變化拱撵。
同時c還是數(shù)組d中的一項辉川,d[2]['age']與c.age指向同一個值。故d的變化能反映到cc上拴测。
console.log(dd)
輸出[1,2,[object Object] { name: 'hello', age: 3 }]乓旗。
理由同上。

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

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) 
console.log(c)

console.log(a)
輸出1昼扛,基本類型值不會因傳參而發(fā)生改變寸齐。
console.log(c)
輸出[object Object] { name: 'jirengu', age: 3 }欲诺。
引用類型值c傳參把地址傳入函數(shù)f2,f2修改了該地址上的age值渺鹦,故c的值也發(fā)生改變扰法。但f1函數(shù)傳入的是基本類型值,不會影響c原本的值毅厚。

5.過濾如下數(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--;
    }
  }
}
filter(arr);
console.log(arr); // [3,1,2]

6.過濾如下數(shù)組吸耿,只保留正數(shù)祠锣,原數(shù)組不變,生成新數(shù)組

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

7.寫一個深拷貝函數(shù)咽安,用兩種方式實現(xiàn)

遞歸方法:

var aaa = {
  name: 'franky',
  age: 100,
  sex: 'male',
  friend: {
    name: 'xxx',
    age: 25,
    sex: 'female'
  }
};
function copy(obj){
  //新建一個對象
  var newObj={};
  //遍歷傳入對象屬性
  for(var key in obj){
//     判斷傳入對象實例中是否有該屬性
    if(obj.hasOwnProperty(key)){
//       判斷屬性是不是基本類型
      if(typeof obj[key] === 'number' ||
         typeof obj[key] === 'string'||
         typeof obj[key] === 'boolean' ||
         obj[key] === undefined||
         obj[key] === null){
//         把基本類型值賦值給新對象
        newObj[key] = obj[key];
      }
//       引用類型的值通過遞歸再次執(zhí)行一次copy函數(shù)
      else{
        newObj[key] = copy(obj[key]);
      }
    }
  }
  return newObj;
}
var bbb = copy(aaa);
console.log(bbb);

JSON方法:

var aaa = {
  name: 'franky',
  age: 100,
  sex: 'male',
  friend: {
    name: 'xxx',
    age: 25,
    sex: 'female'
  }
};
JSON.stringify(aaa);
var bbb = JSON.parse(JSON.stringify(aaa));
console.log(bbb);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末伴网,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子妆棒,更是在濱河造成了極大的恐慌澡腾,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件糕珊,死亡現(xiàn)場離奇詭異动分,居然都是意外死亡,警方通過查閱死者的電腦和手機红选,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進店門澜公,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人喇肋,你說我怎么就攤上這事坟乾。” “怎么了苟蹈?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵糊渊,是天一觀的道長。 經(jīng)常有香客問我慧脱,道長渺绒,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任菱鸥,我火速辦了婚禮宗兼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘氮采。我一直安慰自己殷绍,他們只是感情好,可當我...
    茶點故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布鹊漠。 她就那樣靜靜地躺著主到,像睡著了一般茶行。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上登钥,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天畔师,我揣著相機與錄音,去河邊找鬼牧牢。 笑死看锉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的塔鳍。 我是一名探鬼主播伯铣,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼轮纫!你這毒婦竟也來了腔寡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤蜡感,失蹤者是張志新(化名)和其女友劉穎蹬蚁,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體郑兴,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年贝乎,在試婚紗的時候發(fā)現(xiàn)自己被綠了情连。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡览效,死狀恐怖却舀,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锤灿,我是刑警寧澤挽拔,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站但校,受9級特大地震影響螃诅,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜状囱,卻給世界環(huán)境...
    茶點故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一术裸、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧亭枷,春花似錦袭艺、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽瘤睹。三九已至,卻和暖如春答倡,著一層夾襖步出監(jiān)牢的瞬間轰传,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工苇羡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绸吸,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓设江,卻偏偏與公主長得像锦茁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子叉存,可洞房花燭夜當晚...
    茶點故事閱讀 44,724評論 2 354

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

  • 1.引用類型有哪些码俩?非引用類型有哪些 非引用類型值,即基本類型值(數(shù)值歼捏,布爾值稿存,undefined,null):指...
    LINPENGISTHEONE閱讀 208評論 0 0
  • 1.引用類型有哪些瞳秽?非引用類型有哪些2.如下代碼輸出什么瓣履?為什么? var obj1 = {a:1, b:2}; ...
    Rising_suns閱讀 251評論 0 0
  • 1.引用類型有哪些?非引用類型有哪些 基本類型(數(shù)值练俐、布爾值袖迎、null、undefined):指的是保存在棧內(nèi)存中...
    我七閱讀 158評論 0 0
  • 引用類型有哪些腺晾?非引用類型有哪些燕锥?非引用類型有number、string悯蝉、boolean归形、undefined、nu...
    畢子歌閱讀 247評論 0 0
  • 引用類型有哪些鼻由?非引用類型有哪些暇榴? JS中的數(shù)據(jù)類型分為基本類型和引用類型∥嗣遥基本類型:數(shù)值(number)跺撼、字符串...
    LeeoZz閱讀 268評論 0 0