引用類型對(duì)象拷貝

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

  • 基本類型值(Undefined、Null、Boolean、Number和String):指的是保存在棧內(nèi)存中的簡單數(shù)據(jù)段;
  • 引用類型值(對(duì)象、數(shù)組、函數(shù)、正則):指的是那些保存在堆內(nèi)存中的對(duì)象,變量中保存的實(shí)際上只是一個(gè)指針,這個(gè)指針執(zhí)行內(nèi)存中的另一個(gè)位置,由該位置保存對(duì)象

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

var obj1 = {a:1, b:2};
var obj2 = {a:1, b:2};
console.log(obj1 == obj2); false 因?yàn)?個(gè)obj引用的不是同一個(gè)復(fù)雜對(duì)象
console.log(obj1 = obj2); object 將obj2賦值給obj1,顯示obj2的值
console.log(obj1 == obj2); true 因?yàn)樯厦鎜bj2賦值給obj1,2個(gè)都引用的是同一個(gè)復(fù)雜對(duì)象,所以是true

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

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, 因?yàn)閍是基本類型,所以aa的到1,而a的改變不會(huì)影響到aa
console.log(bb)?2, 因?yàn)閎是基本類型,所以bb的到2,而b的改變不會(huì)影響到bb
console.log(cc)?{name: 'hello', age:3} 因?yàn)閏是引用類型,所以c的改變會(huì)影響到cc
console.log(dd)?[1,2, {name:'hello', age:3}] dd引用了a,b,c的到復(fù)雜類型,,修改dd和d是引用的同一個(gè)數(shù)據(jù),所以d的修改會(huì)影響到dd

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

var a = 1
var c = { name: 'jirengu', age: 2 }

function f1(n){
++n
}
function f2(obj){
++obj.age
}

f1(a) ? 因?yàn)閍是簡單類型,所以在函數(shù)的時(shí)候新創(chuàng)建了一個(gè)變量b=a,b=2,而a=1
f2(c) ?的到 c.age=3
f1(c.age) ?因?yàn)閏.age是簡單類型,所以a.age=3未改變
console.log(a) ?a=1
console.log(c) ?c = { name: 'jirengu', age: 3 }

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

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

function filter(arr){
?for (var i in arr) {
??if (arr[i] <=0) {
???arr.splice(i, 1);
??? filter(arr);
??}
?}
}

過濾如下數(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]

function filter(arr){
?var array = [];
?var n = 0;
?for(var i in arr) {
??if (arr[i] > 0) {
???array[n++] = arr[i];
??}
?}
?return array;
}

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

function deepCopy(oldObj) {
?var newObj= {};
?for (var key in oldObj) {
??if (oldObj.hasOwnProperty(key)) {
???if (typeof oldObj[key] === "string" || typeof oldObj[key] === "number" || typeof oldObj[key] === "boolean" || oldObj[key] === null || oldObj[key] === undefined) {
newObj[key] = oldObj[key];
???} else {
????newObj[key] = deepCopy(oldObj[key]);
???}
??}
?}
return newObj;
}


>var cloneObj = JSON.parse(JSON.stringify(obj));
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 1.引用類型有哪些?非引用類型有哪些2.如下代碼輸出什么?為什么? var obj1 = {a:1, b:2}; ...
    Rising_suns閱讀 289評(píng)論 0 0
  • 1.引用類型有哪些?非引用類型有哪些 非引用類型值,即基本類型值(數(shù)值,布爾值,undefined,null):指...
    LINPENGISTHEONE閱讀 249評(píng)論 0 0
  • 一.引用類型有哪些?非引用類型有哪些引用類型有對(duì)象、數(shù)組、函數(shù)、正則表達(dá)式非引用類型:數(shù)值、布爾值、null、un...
    邵志遠(yuǎn)閱讀 455評(píng)論 0 0
  • 1.引用類型有哪些?非引用類型有哪些 基本類型值(Number、Boolean、string、null和undef...
    saintkl閱讀 395評(píng)論 0 0
  • 1.引用類型有哪些?非引用類型有哪些 引用類型是指那些保存在堆內(nèi)存中的對(duì)象。變量中保存的實(shí)際上只是一個(gè)指針,這個(gè)指...
    高進(jìn)哥哥閱讀 367評(píng)論 0 0

友情鏈接更多精彩內(nèi)容