1. 程式人生 > 實用技巧 >Apache安裝ssl證書

Apache安裝ssl證書

技術標籤:JavaScriptjavascript

淺拷貝只拷貝一層, 深層次的物件只會拷貝其引用(也就是資料存放的記憶體地址),只要修改值原來物件都會修改,語法糖Object.assign(o, obj)

深拷貝會拷貝多層,每一層資料都會拷貝 ,會拷貝深層次的物件和陣列,會重新開闢空間再指向拷貝的物件,修改值時不會改變原來物件的值,第三方外掛lodash

// 淺拷貝案例
var obj = {
  name:'1',
  msg:{
    age: 18,
    color: ['pink', 'red']
  }
}
var o = {}
// for(k in obj){
//   o[k] = obj[k]
// }

// console.log(o)
// o['msg']['age'] = 20
// console.log(o['msg']['age']);
// console.log(obj['msg']['age']);
// 語法糖assign
console.log(Object.assign(o, obj));
console.log(o);

深拷貝利用遞迴來做
var obj2 = {}
function deepCopy(newObj, oldObj) {
    for (let k in oldObj) {
        // 獲取屬性值 oldObj[id] = 1
        var item = oldObj[k]
        // 判斷是否是陣列
        if (item instanceof Array){
            newObj[k] = []
            deepCopy(newObj[k], item)
        }
        // 判斷是否是陣列
        else if (item instanceof Object){
            newObj[k] = {}
            deepCopy(newObj[k], item)
        }
        // 簡單資料型別 newobj[id] = oldObj[id] = 1
        else{
            newObj[k] = item
        }
    }
}
deepCopy(obj2, obj)
console.log(obj2);
obj2.msg.age = 30
console.log(obj.msg.age); // 20