引用類型弯蚜、對象拷貝

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

  • 引用類型
    引用類型(對象剃法、數(shù)組碎捺、函數(shù)、正則):
    指的是那些保存在堆內(nèi)存中的對象贷洲,變量中保存的實際上只是一個指針收厨,這個指針指向內(nèi)存中的另一個位置,由該位置保存對象优构。

  • 非引用類型(基本類型)
    基本類型值(數(shù)值诵叁、布爾值、null和undefined):
    指的是保存在棧內(nèi)存中的簡單數(shù)據(jù)段钦椭;

2.代碼練習

(1)如下代碼輸出什么拧额?為什么

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2);
// false     
// 因為對象比較的是兩個地址,兩個對象的地址不同
console.log(obj1 = obj2);
 // Object {a: 1, b: 2} 
// 因為把 obj2 的地址賦給了 obj1
console.log(obj1 == obj2);
// true
// 因為對象比較的是兩個地址,前面把地址賦過了彪腔,地址相同

(2)如下代碼輸出什么侥锦?為什么

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 
        // 基本類型賦值完后互相獨立
  console.log(bb)   //  2
        // 基本類型賦值完后互相獨立
  console.log(cc)   //  Object {name: 'hello', age: 3}
        // 引用類型賦值完后互相關(guān)聯(lián),指向同一個對象
  console.log(dd)   //  [1, 2, {name: 'hello', age: 3}]
        // 引用類型賦值完后互相關(guān)聯(lián)德挣,指向同一個對象

(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   
  //  因為函數(shù)的形參和實參(在這里n是形參恭垦,a是實參),是兩個變量格嗅,如果傳遞進去的實參保存的是基本類型番挺,形參和外面的變量保存的基本類型的值,互相獨立吗浩,互不影響
  console.log(c)    
  //  輸出 Object {name: 'jirengu', age: 3}
  //  因為函數(shù)的形參和實參建芙,是兩個變量没隘,如果傳遞進去的實參保存的是引用類型懂扼,形參改變,外面的變量保存著的對象也隨之改變

(4) 過濾如下數(shù)組,只保留正數(shù)阀湿,直接在原數(shù)組上操作

var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
}
filter(arr)
console.log(arr) // [3,1,2]
-------------------------------
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);
            filter(arr);
        }
    }
}
filter(arr)
console.log(arr)  // [3,1,2]

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

(5) 過濾如下數(shù)組赶熟,只保留正數(shù),原數(shù)組不變陷嘴,生成新數(shù)組

var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){
}
var arr2 = filter(arr)
console.log(arr2) // [3,1,2]
console.log(arr)  // [3,1,0,-1,-2,2,-5]
-----------------------------------------------------
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]

(6)寫一個深拷貝函數(shù)映砖,用兩種方式實現(xiàn)

第一種:
function copy(obj){
    var newObj = {};
    for (var key in obj){
        if(obj.hasOwnProperty(key)){
            if(typeof obj[key] ==='number' || typeof obj[key] ==='boolean'
                        || typeof obj[key] ==='string'|| obj[key] === undefined||
                         obj[key] === null){
//對null不能用typeof檢測會返回object
            newObj[key] = obj[key];
        }else{
            newObj[key] = copy(obj[key]);
        }
    }   
}
    return newObj;
}
第二種:
JSON.stringify(obj)
JSON.parse()
JSON.parse(JSON.stringify(obj))
function copy(obj){
        var newObj = JSON.parse(JSON.stringify(obj));
        return newObj;
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市灾挨,隨后出現(xiàn)的幾起案子邑退,更是在濱河造成了極大的恐慌,老刑警劉巖劳澄,帶你破解...
    沈念sama閱讀 221,430評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件地技,死亡現(xiàn)場離奇詭異,居然都是意外死亡秒拔,警方通過查閱死者的電腦和手機莫矗,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,406評論 3 398
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來砂缩,“玉大人作谚,你說我怎么就攤上這事♀职牛” “怎么了妹懒?”我有些...
    開封第一講書人閱讀 167,834評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長喳挑。 經(jīng)常有香客問我彬伦,道長,這世上最難降的妖魔是什么伊诵? 我笑而不...
    開封第一講書人閱讀 59,543評論 1 296
  • 正文 為了忘掉前任单绑,我火速辦了婚禮,結(jié)果婚禮上曹宴,老公的妹妹穿的比我還像新娘搂橙。我一直安慰自己,他們只是感情好笛坦,可當我...
    茶點故事閱讀 68,547評論 6 397
  • 文/花漫 我一把揭開白布区转。 她就那樣靜靜地躺著,像睡著了一般版扩。 火紅的嫁衣襯著肌膚如雪废离。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,196評論 1 308
  • 那天礁芦,我揣著相機與錄音蜻韭,去河邊找鬼悼尾。 笑死,一個胖子當著我的面吹牛肖方,可吹牛的內(nèi)容都是我干的闺魏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,776評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼俯画,長吁一口氣:“原來是場噩夢啊……” “哼析桥!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起艰垂,我...
    開封第一講書人閱讀 39,671評論 0 276
  • 序言:老撾萬榮一對情侶失蹤泡仗,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后猜憎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體沮焕,經(jīng)...
    沈念sama閱讀 46,221評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,303評論 3 340
  • 正文 我和宋清朗相戀三年拉宗,在試婚紗的時候發(fā)現(xiàn)自己被綠了峦树。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,444評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡旦事,死狀恐怖魁巩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情姐浮,我是刑警寧澤谷遂,帶...
    沈念sama閱讀 36,134評論 5 350
  • 正文 年R本政府宣布,位于F島的核電站卖鲤,受9級特大地震影響肾扰,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛋逾,卻給世界環(huán)境...
    茶點故事閱讀 41,810評論 3 333
  • 文/蒙蒙 一集晚、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧区匣,春花似錦偷拔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,285評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姑丑,卻和暖如春蛤签,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背栅哀。 一陣腳步聲響...
    開封第一講書人閱讀 33,399評論 1 272
  • 我被黑心中介騙來泰國打工震肮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留踏枣,地道東北人。 一個月前我還...
    沈念sama閱讀 48,837評論 3 376
  • 正文 我出身青樓钙蒙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親间驮。 傳聞我的和親對象是個殘疾皇子躬厌,可洞房花燭夜當晚...
    茶點故事閱讀 45,455評論 2 359

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

  • 1.引用類型有哪些?非引用類型有哪些非引用類型值竞帽,即基本類型值(數(shù)值扛施,布爾值,undefined屹篓,null):指保...
    青鳴閱讀 405評論 0 0
  • 引用類型 引用類型變量保存的僅僅是一個指針堆巧,指針指向堆內(nèi)存中保存對象的位置妄荔。 所以基本類型復(fù)制的時候僅僅復(fù)制值,復(fù)...
    DeeJay_Y閱讀 577評論 0 0
  • 1.引用類型有哪些谍肤?非引用類型有哪些 基本類型值(Number啦租、Boolean、string荒揣、null和undef...
    saintkl閱讀 358評論 0 0
  • 1.引用類型有哪些篷角?非引用類型有哪些 基本類型值(數(shù)值、布爾值系任、null和undefined):指的是保存在棧內(nèi)存...
    Feiyu_有貓病閱讀 263評論 0 0
  • 1.引用類型有哪些恳蹲?非引用類型有哪些 ECMA Script中規(guī)定,javascript的基本數(shù)據(jù)類型分為兩類俩滥,即...
    66dong66閱讀 298評論 0 0