js物件的轉殖

2021-08-31 12:39:11 字數 1002 閱讀 5954

由於js是採用引用傳值的,故修改任何乙個物件,其關聯的物件也會被改變,但很多時候我們只想得到乙個物件的拷貝,而非引用。下面提供了一種實現。不過除非程式中需要,否則要避免操作物件的拷貝,因為這樣會影響效能,造成太多的遞迴呼叫(too much recursive)。

function clone(o)  else 

// 採用這種判斷,而非typeof(o) === 'object',這裡只處理object,而不處理其他包括array、string、date、function等,但由new建立的function物件的也是object

} else if (object.prototype.tostring.call(o) === '[object object]') ;

for (var p in o)

} else

return c;

}}

該方法當物件中有大量的資料時,進行深拷貝會進行大量的遞迴,這樣可能會造成程式不能執行下去,所以盡量避免使用。如果必須使用時首先得確保被拷貝的物件不是很大。

另外對於陣列,如果陣列中的元素是數字型或是字元型的,可以呼叫concat來簡單的完成陣列的複製

var arr1 = [12,34,56];

var arr3 = .concat(arr1);

arr1.push(77);//arr1改變

alert(arr1);//12,34,56,77

alert(arr3);//12,34,56說明arr1和arr3不是指向同乙個物件

var arr2 = [23,45,67];

arr3 = .concat(arr1,arr2);//多個陣列的複製

alert(arr1);

alert(arr2);

alert(arr3);

通過執行以上**,可以看出呼叫concat後,重新建立了乙個物件。這裡需要注意的,對於從正被連線到新陣列的陣列中複製的是物件引數,複製後仍然指向相同的物件。不論新陣列和源陣列中哪乙個有改變,都將引起另乙個的改變。

JS 物件轉殖的方法

1.object.assign 物件淺複製 created by itw zhangdl on 2018 1 10.let obj let obj2 object.assign obj obj.friends.push 4 console.log obj2 2.object.creat 詳情看es6...

js 物件的深轉殖

前端筆試或者面試的時候,很喜歡問的乙個問題就是物件的深度轉殖,或者說是物件的深度複製。其實這個問題說容易很容易,但是要說全面也挺不易。要弄明白物件的轉殖,首先要明白js中物件的組成。在js中一切例項皆是物件,具體分為原始型別和合成型別。原始型別物件指的是number string boolean等,...

js深度轉殖物件

用js實現物件轉殖最關鍵的兩點就是 var objclone new this.constructor 和objclone key this key clone 乙個實現相同物件建立,乙個實現深度轉殖。object.prototype.clone function else for var key ...