1. 程式人生 > >js物件的淺拷貝和深拷貝

js物件的淺拷貝和深拷貝

物件複製分為深拷貝和淺拷貝。
淺拷貝只會將物件中的各個屬性依次複製,而不會遞迴複製,因為js儲存物件是存地址的,所以會造成複製物件和原物件指向同一記憶體地址。
淺拷貝的程式碼簡單實現:

var obj = { a:1, arr: [2,3] };
var shadowObj = shadowCopy(obj);
function shadowCopy(src) {
  var dst = {};
  for (var prop in src) {
    if (src.hasOwnProperty(prop)) {
      dst[prop] = src[prop];
    }
  }
  return
dst;}

深拷貝是指對物件的遞迴複製,包括物件中的物件,看到一個深拷貝的程式碼實現

var cloneObj = function(obj){
    var str, newobj = obj.constructor === Array ? [] : {};
    if(typeof obj !== 'object'){
        return;
    } else if(window.JSON){
        str = JSON.stringify(obj), //系列化物件
        newobj = JSON.parse(str); //還原
    } else
{ for(var i in obj){ newobj[i] = typeof obj[i] === 'object' ? cloneObj(obj[i]) : obj[i]; } } return newobj; };