JS(三)--引用類型對象拷貝

1.引用類型有哪些濒翻?非引用類型有哪些屁柏?

引用類型包括:對象,數(shù)組有送,函數(shù)淌喻,正則。指的是那些保存在堆內存中的對象娶眷,變量中保存的實際上只是一個指針似嗤,這個指針執(zhí)行內存中的另一個位置,由該位置保存對象届宠。
基本類型值包括:數(shù)值烁落,字符串,布爾值豌注,null和undefined伤塌。指的是保存在棧內存中的簡單數(shù)據(jù)段。

2.如下代碼輸出什么轧铁?為什么
var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2); 
// false每聪,obj1和obj2雖然內容相同,但是它們在內存中存儲的地址不同齿风,所以比較結果為false
console.log(obj1 = obj2);  
// {a:1, b:2}药薯,將obj2的引用地址賦值給了obj1
console.log(obj1 == obj2); 
// true,賦值后救斑,obj1和obj2的引用地址相同了童本,因此為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) 
// 1,a是基本類型脸候,所以將a的值傳給了aa穷娱,之后a的值的改變不會影響到aa
console.log(bb) 
// 2,與a的原因相同
console.log(cc) 
// {name: 'hello', age:3}运沦,c是對象泵额,是引用類型,所以只是將c的地址傳給了cc携添,c中name屬性的變化實際上也就影響到了cc中的name屬性
console.log(dd) 
// [1,2,{name: 'hello',age:3}]嫁盲,d是數(shù)組,也是引用類型烈掠,所以改變d中c對象的age屬性會實時反映在dd中羞秤,同時還會影響到cc和c
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) 
//1 執(zhí)行函數(shù)f1時其實聲明了變量n并將a的值傳給了n向叉,由于a是number類型锥腻,所以n值的改變不會再影響到a
console.log(c) 
// {name: 'jirengu', age: 3} c是對象,所以++obj.age使得c.age的值加1母谎,執(zhí)行f1時傳入的c.age是number類型瘦黑,不會再影響到c,所以c.age為3
5.過濾如下數(shù)組奇唤,只保留正數(shù)幸斥,直接在原數(shù)組上操作
var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
  var length = arr.length;
  for (var i = 0; i < 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 arr1 = [];
  for (var i = 0; i < arr.length; i++) {
    if (arr[i] > 0) {
      arr1.push(arr[i]);
    }
  }
  return arr1;
}
var arr2 = filter(arr)
console.log(arr2) // [3,1,2]
console.log(arr)  // [3,1,0,-1,-2,2,-5]
7.寫一個深拷貝函數(shù),用兩種方式實現(xiàn)

方式一:

function deepCopy(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];
      }
      else {
        newObj[key] = deepCopy(obj[key])
      }
    }
  }
  return newObj;
}
var obj = {
    name:'supoxiao',
    age: 14,
    base: {
      height: 180,
      sex: 'male'
    }
}
var obj2 = deepCopy(obj);
obj['base'].height = 170;
console.log(obj); 
console.log(obj2);

方式二:

function deepCopy(obj) {
  var newObj = JSON.parse(JSON.stringify(obj));
  return newObj;
}
var obj = {
    name:'supoxiao',
    age: 14,
    base: {
      height: 180,
      sex: 'male'
    }
}
var obj2 = deepCopy(obj);
obj['base'].height = 170;
console.log(obj); 
console.log(obj2);
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末懈贺,一起剝皮案震驚了整個濱河市经窖,隨后出現(xiàn)的幾起案子坡垫,更是在濱河造成了極大的恐慌,老刑警劉巖画侣,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冰悠,死亡現(xiàn)場離奇詭異,居然都是意外死亡配乱,警方通過查閱死者的電腦和手機溉卓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搬泥,“玉大人桑寨,你說我怎么就攤上這事》揲荩” “怎么了尉尾?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長休溶。 經(jīng)常有香客問我代赁,道長,這世上最難降的妖魔是什么兽掰? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任芭碍,我火速辦了婚禮,結果婚禮上孽尽,老公的妹妹穿的比我還像新娘窖壕。我一直安慰自己,他們只是感情好杉女,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布瞻讽。 她就那樣靜靜地躺著,像睡著了一般熏挎。 火紅的嫁衣襯著肌膚如雪速勇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天坎拐,我揣著相機與錄音烦磁,去河邊找鬼。 笑死哼勇,一個胖子當著我的面吹牛都伪,可吹牛的內容都是我干的。 我是一名探鬼主播积担,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼陨晶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帝璧?” 一聲冷哼從身側響起先誉,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤湿刽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后谆膳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體叭爱,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡撮躁,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年漱病,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片把曼。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡杨帽,死狀恐怖,靈堂內的尸體忽然破棺而出嗤军,到底是詐尸還是另有隱情注盈,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布叙赚,位于F島的核電站老客,受9級特大地震影響,放射性物質發(fā)生泄漏震叮。R本人自食惡果不足惜胧砰,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苇瓣。 院中可真熱鬧尉间,春花似錦、人聲如沸击罪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媳禁。三九已至眠副,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竣稽,已是汗流浹背囱怕。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留丧枪,地道東北人光涂。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像拧烦,于是被迫代替她去往敵國和親忘闻。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內容