引用類型和對象拷貝

一、引用類型有哪些闪金?非引用類型有哪些

JS 中分基本類型和引用類型。

  • 基本類型值(數(shù)值论颅、布爾值哎垦、字符串、null和undefined):指的是保存在棧內(nèi)存中的簡單數(shù)據(jù)段恃疯;
  • 引用類型值(對象漏设、數(shù)組、函數(shù)今妄、正則):指的是那些保存在堆內(nèi)存中的對象郑口,變量中保存的實際上只是一個指針,這個指針執(zhí)行內(nèi)存中的另一個位置盾鳞,由該位置保存對象

二犬性、如下代碼輸出什么?為什么

題目

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

結(jié)果

false
{a: 1, b: 2}
true
//對象是引用類型腾仅,上面代碼創(chuàng)建了兩個對象乒裆,雖然內(nèi)容相同,但實際上兩個對象是指向不同內(nèi)存空間的推励,因此并不相同鹤耍。但當 obj1 = obj2 賦值操作之后,相當于把 obj2 的指針賦給了 obj1验辞,因此稿黄,它們現(xiàn)在相同了。

三跌造、如下代碼輸出什么? 為什么

題目

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)

結(jié)果

//輸出
1
2
{name: 'hello', age: 3}
[1, 2, {name: 'hello', age: 3}]

//對象和數(shù)組是引用類型抛猖,所以不新開辟空間的話,怎么修改值鼻听,都會影響所有引用到的變量财著。

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

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)

結(jié)果

//輸出
1
{ name: 'jirengu', age: 3 }

//f1 中撑碴,在傳進函數(shù)的參數(shù)里撑教,傳參相當于聲明了一個新的變量,同時該對象是基本類型醉拓,因此改變傳遞參數(shù)的值并不會影響原來的值伟姐。
//f2 中收苏,傳參是引用類型,哪怕新聲明了一個變量愤兵,但指針還是原來對象鹿霸,因此改變傳參會影響到原來數(shù)值。

五秆乳、過濾如下數(shù)組懦鼠,只保留正數(shù),直接在原數(shù)組上操作

var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){

  //在這下面寫代碼
  for(var n = 0; n < arr.length; n++){
    if(arr[n] <= 0){
      arr.splice(n, 1)
      //因為是直接在原數(shù)組上操作屹堰,所以每次刪除一個值的時候肛冶,原數(shù)組的 length 也被改變了,索引減一才能正確表示下一個值
      n--
    }
  }
  //在這上面寫代碼
}
filter(arr)
console.log(arr) // [3,1,2]

六扯键、過濾如下數(shù)組睦袖,只保留正數(shù),原數(shù)組不變荣刑,生成新數(shù)組

var arr = [3,1,0,-1,-3,2,-5]
function filter(arr){

  //在這下面寫代碼
  
  var tmp = []
  for(var n = 0; n < arr.length; n++){
    if(arr[n] > 0){
      tmp.push(arr[n])
    }
  }
  return tmp

  //在這上面寫代碼
}
var arr2 = filter(arr)
console.log(arr2) // [3,1,2]
console.log(arr)  // [3,1,0,-1,-2,2,-5]

七馅笙、寫一個深拷貝函數(shù),用兩種方式實現(xiàn)

1. 遞歸

function isFundamentalType(value){
  if(typeof value === 'number' || typeof value === 'string' || typeof value === 'boolean' || value === undefined || value === null){
    return true
  }else {
    return false
  }
}

function deepCopy(obj){
  var newObj = {}
  for(attr in obj){
    if(obj.hasOwnProperty(attr)){
      if(isFundamentalType(obj[attr])){
        newObj[attr] = obj[attr]
      }else {
        newObj[attr] = deepCopy(obj[attr])
      }
    }
  }
  return newObj
}

var obj = {name: 'SHINING', sex: 'male', friends: {name: 'cool'}}

var newObj = deepCopy(obj)

console.log(newObj)

2. 先轉(zhuǎn)換成基本類型(字符串)厉亏,后還原成對象

function deepCopy(obj){
  var str = JSON.stringify(obj)
  return JSON.parse(str)
}

var obj = {name: 'SHINING', sex: 'male', friends: {name: 'cool'}}

var newObj = deepCopy(obj)

console.log(newObj)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末延蟹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子叶堆,更是在濱河造成了極大的恐慌阱飘,老刑警劉巖砸琅,帶你破解...
    沈念sama閱讀 222,807評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件剖煌,死亡現(xiàn)場離奇詭異,居然都是意外死亡罕容,警方通過查閱死者的電腦和手機忘渔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,284評論 3 399
  • 文/潘曉璐 我一進店門高帖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人畦粮,你說我怎么就攤上這事散址。” “怎么了宣赔?”我有些...
    開封第一講書人閱讀 169,589評論 0 363
  • 文/不壞的土叔 我叫張陵预麸,是天一觀的道長。 經(jīng)常有香客問我儒将,道長吏祸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,188評論 1 300
  • 正文 為了忘掉前任钩蚊,我火速辦了婚禮贡翘,結(jié)果婚禮上蹈矮,老公的妹妹穿的比我還像新娘。我一直安慰自己鸣驱,他們只是感情好泛鸟,可當我...
    茶點故事閱讀 69,185評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著踊东,像睡著了一般北滥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上递胧,一...
    開封第一講書人閱讀 52,785評論 1 314
  • 那天,我揣著相機與錄音赡茸,去河邊找鬼缎脾。 笑死,一個胖子當著我的面吹牛占卧,可吹牛的內(nèi)容都是我干的遗菠。 我是一名探鬼主播,決...
    沈念sama閱讀 41,220評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼华蜒,長吁一口氣:“原來是場噩夢啊……” “哼辙纬!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起叭喜,我...
    開封第一講書人閱讀 40,167評論 0 277
  • 序言:老撾萬榮一對情侶失蹤贺拣,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后捂蕴,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體譬涡,經(jīng)...
    沈念sama閱讀 46,698評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,767評論 3 343
  • 正文 我和宋清朗相戀三年啥辨,在試婚紗的時候發(fā)現(xiàn)自己被綠了涡匀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,912評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡溉知,死狀恐怖陨瘩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情级乍,我是刑警寧澤舌劳,帶...
    沈念sama閱讀 36,572評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站玫荣,受9級特大地震影響蒿囤,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜崇决,卻給世界環(huán)境...
    茶點故事閱讀 42,254評論 3 336
  • 文/蒙蒙 一材诽、第九天 我趴在偏房一處隱蔽的房頂上張望底挫。 院中可真熱鬧,春花似錦脸侥、人聲如沸建邓。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,746評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽官边。三九已至,卻和暖如春外遇,著一層夾襖步出監(jiān)牢的瞬間注簿,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,859評論 1 274
  • 我被黑心中介騙來泰國打工跳仿, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诡渴,地道東北人。 一個月前我還...
    沈念sama閱讀 49,359評論 3 379
  • 正文 我出身青樓菲语,卻偏偏與公主長得像妄辩,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子山上,可洞房花燭夜當晚...
    茶點故事閱讀 45,922評論 2 361

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

  • 1. 引用類型有哪些眼耀,非引用類型有哪些? 基本類型(非引用類型):Number, String, Boolean,...
    _達斯基閱讀 242評論 0 0
  • 引用類型和非引用類型 基本類型值(number佩憾、boolean哮伟、string、null妄帘、undefined):指的...
    Joey的企鵝閱讀 178評論 0 0
  • 1.引用類型有哪些?非引用類型有哪些 引用類型:數(shù)組,對象,函數(shù),正則.引用類型是指實質(zhì)內(nèi)容保存在堆內(nèi)存,棧內(nèi)存只...
    饑人谷_張世鈞閱讀 173評論 0 0
  • 1.引用類型有哪些澈吨?非引用類型有哪些 基本類型值「非引用類型」(數(shù)值、布爾值寄摆、null和undefined,str...
    來人啊都給朕退下吧閱讀 190評論 0 0
  • 我想我有兩個我谅辣,或許像你像赤火,又或像她像溫玫:一個炙熱濃烈婶恼,一個極致敏感桑阶。只是,我能感受她勾邦,她能感受我蚣录,就這樣,...
    侑生之年閱讀 221評論 0 1