JavaScript數據的值複製

ECMAScript包括兩個不同類型的值:基本數據類型和引用數據類型。

基本數據類型指的是簡單的數據段,引用數據類型指的是有多個值構成的對象。

JavaScript中基本數據類型的賦值和函數傳參是值傳遞,而引用數據類型的賦值和函數傳參是引用傳遞。

// 實現一個函數clone,對JavaScript中的主要的數據類型(包括Number、String、Object、Array、Boolean)進行值複製。

function clone(obj) {
let copy;
switch (typeof obj) {
case "undefined":
break;
case "number":
copy = obj - 0;
break;
case "string":
copy = obj + "";
break;
case "boolean":
copy = obj;
break;
case "object": // object分爲三種情況 (null),對象(Object)和數組(Array)
if (obj === null) {// null類型被看做空對象指針,即空的對象引用。只有一個值,即null值,
                        所以,在用typeof 操作符去檢測null類型的值時,結果是object類型。
copy = null;
} else {
                // 通過對象的原型判斷傳入參數是否爲數組
if (Object.prototype.toString.call(obj).slice(8, -1) === "Array") {
// String.slice(start,end) start參數爲截取開始位置,end參數爲結束位置
copy = [];
for (var i = 0; i < obj.length; i++) {
copy.push(clone(obj[i]));
}
} else if(Object.prototype.toString.call(obj).slice(8,-1)==="Object"){
// 如果對象的原型是Object進行對象遍歷
copy = {};
for (var j in obj) {
copy[j] = clone(obj[j]);
}
} else {
// [object Date],[object RegExp],[object Function] 不做處理
copy = Object.prototype.toString.call(obj);
}
}
break;
default:
copy = obj;
break;
}
return copy;
}


數組對象的深拷貝:

var clone = function(v) {
  var o = v.constructor === Array ? [] : {};
  for (var i in v) {
    o[i] = typeof v[i] === "Object" ? clone(v[i]) : v[i];
  }
  return o;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章