引用類型侧啼、對象拷貝

陳智濤

1.引用類型有哪些懈凹?非引用類型有哪些膏执?

js中的數(shù)據(jù)類型有以下幾種:
Number Boolean undefined Object Function String Null
基本類型值就是簡單的數(shù)據(jù)段;引用類型值可能由多個值構(gòu)成的對象熟菲。
(1)JavaScript中的引用類型的值是保存在堆內(nèi)存中的看政,通用訪問其地址的方式使用朴恳。引用類型有:對象,函數(shù)允蚣。
(2)基本類型的數(shù)據(jù)是存放在棧內(nèi)存中的于颖,非引用類型有:Number Boolean undefined String Null

2.如下代碼輸出什么?為什么嚷兔?

var a = 1
var b = 2
var c = { name: 'jirengu', 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)  // {name: 'hello', age: 3}
console.log(dd)  // [1, 2, {name: 'hello', age: 3}]
  • 原因:
    var a 和var b 是基本類型森渐,變量的值就存放在棧內(nèi)存中,當(dāng)把a(bǔ)和b的值賦值給aa和bb 后冒晰,aa 和bb 的值就對應(yīng)變成了a和b的值同衣,但a和b的值再次改變不會影響aa和bb。但var c和var d 是引用類型壶运,當(dāng)聲明后耐齐,對應(yīng)的c和d存放的是對應(yīng)存在在堆內(nèi)存的地址,所以把c和d的值賦值給cc和dd 前弯,也是對應(yīng)的地址蚪缀,當(dāng)c和d的值再次改變,cc和dd 也會改變恕出。

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) //a = 1
console.log(c)//c = 3
  • 原因,同問題2

4.過濾如下數(shù)組浙巫,只保留正數(shù)金蜀,直接在原數(shù)組上操作

function filter(arr){
    
    for(var i = 0; i < arr.length;i++){
        if(arr[i]<0 ){
            for(var j = i;j<arr.length;j++){
                arr[j] = arr[j+1];
            }
            arr.length--;
            i--;

        }
    }
    
}
var arr = [-3,13,1,0,-1,-3,2,-5]
filter(arr)

console.log(arr)

5.過濾如下數(shù)組,只保留正數(shù)的畴,原數(shù)組不變渊抄,生成新數(shù)組

function filter(arr){
    var newarr = new Array();
    var j = 0;
    for(var i = 0; i < arr.length;i++){
        if(arr[i]>0 ){
            newarr[j] = arr[i];
            j++;

        }
    }
    return newarr;
}
var arr = [3,1,0,-1,-3,2,-5]
var arr2 = filter(arr)
console.log(arr2) // [3,1,2]
console.log(arr)

方法二:
引用評論方法

var str = [-4,3,2,2,2,2,32,3,3,4,-2,0,2];
        var newstr = str.filter(function(key){
            return key >0;
        });
        console.log(newstr);

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

說先要理解淺拷貝與深拷貝的區(qū)別:
淺拷貝只會對對象的屬性的值依次進(jìn)行復(fù)制丧裁,并不會對拷貝對象的的引用類型進(jìn)行遞歸拷貝护桦。之就會導(dǎo)致淺拷貝后的對象會和原始對象公用元素中引用類型的地址。
而深拷貝則是對對象的屬性當(dāng)作對象遞歸拷貝煎娇,這就避免了公用數(shù)據(jù)對象了二庵。

  • 淺拷貝的例子:
function shadowCopy(obj) {
  var newobj = {};
  for (var key in obj) {
    if (obj.hasOwnProperty(key)) {
      newobj[key] = obj[key];
    }
  }
  return newobj;
}
var obj = { a:1, arr: [2,3] };
var shadowObj = shadowCopy(obj);
shadowObj.arr[1] = 4 ;
obj.arr[1]   // = 4

  • 深拷貝的兩種實現(xiàn)方式:
    方式一,遞歸:
function deepCopy(src){
    var dest = {};
    for(var key in src){
        if(typeof src[key] === 'object' && src[key] !==null){
            dest[key] = deepCopy(src[key]);
        }
        else{
            dest[key] = src[key];
        }
    }
    return dest;
}

var obj = { a:1, arr: [2,3] };
var deepobj = deepCopy(obj);
deepobj.arr[1] = 4 ;
obj.arr[1]   // =3 

方式二缓呛,JSON序列化與反序列化

function deepCopyByJSON(src){
    var dest = JSON.parse(JSON.stringify(src));
    return dest;
}
var obj = { a:1, arr: [2,3] };
var deepobj = deepCopyByJSON(obj);
deepobj.arr[1] = 4 ;
obj.arr[1]  //= 3
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末催享,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子哟绊,更是在濱河造成了極大的恐慌因妙,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異攀涵,居然都是意外死亡铣耘,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進(jìn)店門以故,熙熙樓的掌柜王于貴愁眉苦臉地迎上來涡拘,“玉大人,你說我怎么就攤上這事据德■Γ” “怎么了?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵棘利,是天一觀的道長橱野。 經(jīng)常有香客問我,道長善玫,這世上最難降的妖魔是什么水援? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮茅郎,結(jié)果婚禮上蜗元,老公的妹妹穿的比我還像新娘。我一直安慰自己系冗,他們只是感情好奕扣,可當(dāng)我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著掌敬,像睡著了一般惯豆。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上奔害,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天楷兽,我揣著相機(jī)與錄音,去河邊找鬼华临。 笑死芯杀,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的雅潭。 我是一名探鬼主播揭厚,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼寻馏!你這毒婦竟也來了棋弥?” 一聲冷哼從身側(cè)響起核偿,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤诚欠,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體轰绵,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡粉寞,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了左腔。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片唧垦。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖液样,靈堂內(nèi)的尸體忽然破棺而出振亮,到底是詐尸還是另有隱情,我是刑警寧澤鞭莽,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布坊秸,位于F島的核電站,受9級特大地震影響澎怒,放射性物質(zhì)發(fā)生泄漏褒搔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一喷面、第九天 我趴在偏房一處隱蔽的房頂上張望星瘾。 院中可真熱鬧,春花似錦惧辈、人聲如沸琳状。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽算撮。三九已至,卻和暖如春县昂,著一層夾襖步出監(jiān)牢的瞬間肮柜,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工倒彰, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留审洞,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓待讳,卻偏偏與公主長得像芒澜,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子创淡,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,047評論 2 355

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

  • 1.引用類型有哪些痴晦?非引用類型有哪些非引用類型值,即基本類型值(數(shù)值琳彩,布爾值誊酌,undefined部凑,null):指保...
    青鳴閱讀 403評論 0 0
  • 1.引用類型有哪些?非引用類型有哪些 非引用類型值碧浊,即基本類型值(數(shù)值涂邀,布爾值,undefined箱锐,null):指...
    LINPENGISTHEONE閱讀 208評論 0 0
  • 1.引用類型有哪些比勉?非引用類型有哪些 基本類型值(Number、Boolean驹止、string浩聋、null和undef...
    saintkl閱讀 358評論 0 0
  • 引用類型有哪些?非引用類型有哪些 基本類型值(Undefined臊恋、Null赡勘、Boolean、Number和Stri...
    jamesXiao_閱讀 150評論 0 0
  • .引用類型 & 非引用類型 引用類型值(對象捞镰、數(shù)組闸与、函數(shù)、正則):指的是那些保存在堆內(nèi)存中的對象岸售,變量中保存的實際...
    邢烽朔閱讀 329評論 0 0