# 🏅 5/10 (一) 每日任務 Day 11 ###### tags: `Vue 直播班 - 2021 夏季班` ### 物件參考觀念 (關鍵字: JS 深拷貝、淺拷貝差異) 題目 (直接貼上答案) --- (1) 1-1. 請問以下的輸出結果為何? 1-2. 如果希望 `console.log(obj === objNew);` 的結果為 false,則可以如何修改? ```js= let obj = { title: '錢錢', amounts: 66666, } let objNew = obj; objNew.amounts = 123; console.log(obj.amounts); // 輸出結果為何? console.log(obj === objNew); // 輸出結果為 true 還是 false? ``` (2) (陷阱題!,需要用深拷貝處理) 2-1. 請問以下的輸出結果為何? 2-2. 如果希望調整 `objNew.innerObj` 時不會影響到 obj,則可以如何修改? ```js= let obj = { title: '錢錢', amounts: 66666, innerObj: { title: '私房錢', amounts: 1000 } } let objNew = {...obj}; console.log(obj === objNew); // 輸出結果為 true 還是 false? objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); // 輸出結果為何? ``` 回報流程 --- 請同學依照下圖教學觀看解答、回報答案: ![](https://i.imgur.com/QtL8zEW.png) 回報格式如下圖,請在「回報區」使用註解回報答案 (為了統計人數,請同學依序加上「報數」) ![](https://i.imgur.com/L7kyew8.png) <!-- 解答 (1) 1-1. console.log(obj.amounts) // 123 console.log(obj === objNew) // true 1-2. // 淺拷貝 可以將 let objNew = obj; 修改為 a. let objNew = {...obj}; b. let objNew = Object.assign({}, obj); // 深拷貝 let objNew = JSON.parse(JSON.stringify(obj)); (2) 2-1. console.log(obj === objNew); // 結果為 false objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); // 結果為 2000 2-2. // 深拷貝 可以將 let objNew = {...obj}; 修改為 let objNew = JSON.parse(JSON.stringify(obj)); --> 回報區 --- <!--1:Alpha (1) 1-1: console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1-2: let objNew = Object.assign({}, obj); (2) 2-1: console.log(obj === objNew); // 已淺拷貝 false console.log(obj.innerObj.amounts); // 2000 2-2: let objNew = JSON.parse(JSON.stringify(obj)); --> <!--2: Lina Chen (1) 1. console.log(obj.amounts) // 123 console.log(obj === objNew) // true 2. 改成let objNew = Object.assign({}, obj); (2) 1. console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000 2. 改成let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 3: Vic 1-1: 123、true 1-2: let objNew = {...obj}; 2-1: false、2000 2-2: let objNew = JSON.parse(JSON.stringify(obj)) --> <!--4:yijun 1-1 console.log(obj.amounts)//123 console.log(obj === objNew)//true 1-2 改成let objNew = {...obj}; 2-1 console.log(obj === objNew)//false console.log(obj.innerObj.amounts)//2000 2-2 改成let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 5: Yiren 1-1 : 123、true 1-2 : let objNew = Object.assign({},obj); 2-1 : false、2000 2-2 : let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 6:陳sam 1-1 :123,true 1-2 :let objNew = {...obj}; 2-1 :false ,2000 2-2 :let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 7: Sean Liu 1-1 : 123、true 1-2 : 改成let objNew = {...obj}; 2-1 : false、2000 2-2 : 寫一個深烤貝的方法 function cloneObject(obj) { if (obj === null || typeof (obj) !== 'object') return obj; let temp = obj.constructor(); // changed for (let key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { obj['isActiveClone'] = null; temp[key] = cloneObject(obj[key]); delete obj['isActiveClone']; } } return temp; } let objNew = cloneObject(obj); // 參考資料: https://stackoverflow.com/questions/122102/what-is-the-most-efficient-way-to-deep-clone-an-object-in-javascript?page=2&tab=Votes --> <!-- 8: 圈圈 1-1. 請問以下的輸出結果為何? 123 true 1-2. 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? let objNew = {...obj}; 2-1. 請問以下的輸出結果為何? false 2000 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 9:Harold (1) 1-1. 請問以下的輸出結果為何? - `console.log(obj.amounts);` 輸出結果:123 - `console.log(obj === objNew);` 輸出結果:true 1-2. 第五行改成`let objNew = {...obj};` 2-1. 請問以下的輸出結果為何? - `console.log(obj === objNew);` 輸出結果:false - `console.log(obj.innerObj.amounts);`輸出結果:2000 2-2. 第九行改成 `let objNew = JSON.parse(JSON.stringify(obj));` --> <!-- 10:Iven (1) 1-1. 請問以下的輸出結果為何? console.log(obj.amounts); //123 console.log(obj === objNew);//true 1-2. 如果希望 `console.log(obj === objNew);` 的結果為 false,該如何修改? let objNew={...obj} 或是 let objNew=Object.assign({},obj); (2) 2-1. 請問以下的輸出結果為何? console.log(obj === objNew); //false console.log(obj.innerObj.amounts);//2000 2-2. 如果希望調整 `objNew.innerObj` 時不會影響到 obj,則可以如何修改? let objStr=JSON.stringify(obj); let objNew=JSON.parse(objStr); --> <!-- 11: Sec 1-1 console.log(obj.amouts) // 123 console.log(obj === objNew); // true 1-2 let objNew = { ...obj } 2-1 console.log(obj === objNew); // false objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); // 2000 2-2 let objNew = JSON.parse(JSON.stringify(obj)) --> <!--12: Yi Chieh (1) 2-1: console.log(obj.amounts); // 123 console.log(obj === objNew); // true 2-2: let objNew = {...obj}; (2) 2-1: console.log(obj === objNew); // false objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); // 2000 2-2: let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 13 youting codepen: https://codepen.io/youtingluo/pen/ExWjRrW?editors=0011 --> <!-- 14 小魚 1-1.請問以下的輸出結果為何? console.log(obj.amounts) Ans:123 console.log(obj === objNew Ans:true 1-2. 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? Ans: let objNew = {...obj}; 2-1. 請問以下的輸出結果為何? console.log(obj === objNew) Ans:false console.log(obj.innerObj.amounts) Ans:2000 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? Ans: let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 15 Tori 1-1.請問以下的輸出結果為何? A: let objNew = obj 不是複製,而是額外宣告一個 objNew 變數,並跟 obj 共用同一個記憶體位置的資料。 所以 obj.amounts 印出 123,obj === objNew 印出 true 1-2. 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? A: 淺層複製(1): let objNew = {...obj} 淺層複製(2): let Object.assign({}, obj) 深層複製: let objNew = JSON.parse(JSON.stringify(obj)) 2-1. 請問以下的輸出結果為何? A: ...obj 屬於淺層拷貝,複製出來的資料會獨立存放在一個記憶體位置上,所以 obj 和 objNew 屬於不同物件,得到 false。 但是淺層拷貝只能複製第一層的屬性值,如果第一層的值屬於陣列或物件,在修改第二層屬性值時,原本被複製的資料也會被影響,所以 console.log(obj.innerObj.amounts) 得到2000。 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? A: 使用深層拷貝,let objNew = JOSN.parse(JSON.stringify(obj)) 將原本的物件先轉換成文字,再轉換為物件,可以得到一個全新的資料 --> <!-- 16: Jordan Tseng 1-1 console.log(obj.amouts) // 123,因為物件內容是同一個記憶體空間。 console.log(obj === objNew); // true 1-2 可以使用淺拷貝 let objNew = { ...obj } 2-1 console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000因為目前只是淺拷貝,所以第二層之後的記憶體空間還是用同一個,改一個就會影響到其他的。 2-2 let objNew = JSON.parse(JSON.stringify(obj))注意這只能限用於純資料 codePen https://codepen.io/jordan-ttc-design/pen/YzZXvML?editors=1111 --> <!-- 17: Ethan 1-1. console.log(obj.amounts); //123 console.log(obj === objNew); //true 1-2. let objNew = {...obj}; 2-1. console.log(obj === objNew); //false console.log(obj.innerObj.amounts); //2000; 2-2. let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 18: Alvin Chu 1-1. 請問以下的輸出結果為何? console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1-2. 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? objNew = {...obj}; (展開方式屬於淺層拷貝,不影響第一層物件;第二層物件指向依然是原參考點) 2-1. 請問以下的輸出結果為何? console.log(obj2 === obj2New); // false console.log(obj2.innerObj.amounts); // 2000 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? obj2New = JSON.parse(JSON.stringify(obj2)); (轉換後為全新物件) --> <!-- 19: Amanda Chiang 1-1: 123, true 1-2: let objNew = Object.assign({}, obj); 1-2 原因:因 Object.assign() 僅能複製深度只有一層的屬性值。因此此種方式被稱作淺拷貝 (Shallow Copy)。 2-1: false, 2000 2-2: let objNew = JSON.parse(JSON.stringify(obj)); 2-2 原因:{...obj} 為淺拷貝,得利用 JSON.parse(JSON.stringify()) 才能達到深拷貝(Deep Copy)。 --> <!-- 19: tim Chou 1-1: 123 , true 1-2: let objNew = { ...obj }; 2-1: false, 2000 2-2: let objNew2 = JSON.parse(JSON.stringify(obj)); 原因: 若想複製一個物件,可以先用Jason.stringfy將物件字串化後,再parse回物件 但這種方法是無法複製物件裡的函式,因為json只能處理純資料。 --> <!-- 20: Jack 1-1: 123 , true 1-2: let objNew = {...obj} 2-1: false, 2000 2-2: let objNew = JSON.parse(JSON.stringify(obj)); 原因: {...obj}為淺層拷貝,必須要用JSON.parse(JSON.stringify())才可以深層拷貝,不會影響到obj。 --> <!-- 21: Larry codePen: https://codepen.io/manpower0708/pen/ExWjpLE?editors=1111 --> <!-- 22: Alysa Chan Q1 1-1. 結果為123 1-2 輸出結果是true 如果想得出false,寫法如下: let objNew = {...title}; objNew.amounts = 123; console.log(obj.amounts); // 66666 console.log(obj === objNew) // false Q2 2-1. 結果為false 2-2. 輸出結果是2000 如果希望調整 objNew.innerObj 時不會影響到 obj,修改方法如下: let objNew = JSON.parse(JSON.stringify(obj)); console.log(obj === objNew); // false objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); // 輸出結果為1000 --> <!-- 23: Poseidon (1) 1-1:123,true 1-2:let objNew = {...title}; (2) 1-1:false,2000 1-2:let objNew =JSON.parse(JSON.stringify(obj)); --> <!-- 24: shoppingq codepen: https://codepen.io/shoppingq/pen/poeJZOP --> <!-- 25: leolee codepen: https://codepen.io/nekorice/pen/WNpvJYJ --> <!-- 26: carrie Q1 1-1. 123 1-2 true false 輸出結果,如下: let objNew = { ...obj }; //淺層拷貝方法 1 let objNew = Object.assign({}, obj) //淺層拷貝方法 2 Q2 2-1. false 2-2. 2000 調整 objNew.innerObj 時不會影響到 obj,如下 :: let objNew = JSON.parse(JSON.stringify(obj)); --> <!--27: Joe Kuo (1) 1-1. console.log(obj.amounts) 結果為 :123 console.log(obj === objNew) 結果為 :true 1-2. let objNew = obj.assign({}, obj); (2) 2-1. console.log(obj === objNew); 結果為: false console.log(obj.innerObj.amounts); 結果為: 2000 2-2. let objNew = JSON.parse(JSON.stringify(obj)); --> <!--28: Izumi 泉 https://codepen.io/izumi-dev/pen/gOgEZzM --> <!-- 29: Trsunyeng Yu 1-1 console.log(obj.amounts); // 123 console.log(obj === objNew); //true 1-2 // let objNew = obj; // modify to => let objNew = Object.assign({},obj); // ##1 let objNew = {...obj}; // ##2 let objNew = JSON.parse(JSON.stringify(obj)); // ##3 2-1 console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000 2-2 //let objNew = {...obj}; // modify to => let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 29: Ted Kuo 1-1 console.log(obj.amounts); // 123 console.log(obj === objNew); //true 1-2 let objNew = Object.assign({}, obj); 2-1 console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000 2-2 let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 30 Dah 1-1. 請問以下的輸出結果為何? 印出 123 true 1-2. let objNew = obj; 修正為 let objNew = {... obj}; 2-1 請問以下的輸出結果為何? true 2000 2-2 let objNew = {...obj}; 換成先轉字串再轉物件 let objNew = JSON.parse(JSON.stringify(obj)); 詳細 https://codepen.io/hua0124/pen/yLMNGJv --> <!-- 31: Jay 1.1 console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1.2 let objNew = {...obj}; 2.1 console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000 2.2 let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 31: Fred Chang 1.console.log(obj.amounts); // 123 console.log(obj === objNew); // true let objNew = {...obj}; 2.console.log(obj === objNew); // false objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); //2000 let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 32: 阿倫 1-1. 請問以下的輸出結果為何? 1. 123 2. true 1-2. 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? let objNew = Object.assign({}, obj);或 let objNew = {...obj}; 2-1. 請問以下的輸出結果為何? 1. false 2. 2000 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? let objNew=JSON.parse(JSON.stringify(obj)); --> <!-- 33:peter.chen1024 (1) 1-1. 請問以下的輸出結果為何? 123 1-2. 如果希望 `console.log(obj === objNew);` 的結果為 false,則可以如何修改? 改淺層拷貝 let objNew = {...obj}; (2) (陷阱題!,需要用深拷貝處理) 2-1. 請問以下的輸出結果為何? 2000 2-2. 如果希望調整 `objNew.innerObj` 時不會影響到 obj,則可以如何修改? 因為淺層拷貝只有第一層不會被修改,第二層以上一樣為參考值。 可以改用深層拷貝 let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 34:Oober 1-1. console.log(obj.amounts) // 123 console.log(obj === objNew) // true 1-2. //淺拷貝 let objNew = {...obj}; let objNew = object.assign({} ,obj); //深拷貝 let objNew = JSON.parse(JSON.stringify(obj)); 2-1 console.log(obj === objNew); // 結果為 false objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); // 結果為 2000 2-2 // 深拷貝 let objNew = {...obj}; 修改為 let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 35: Erica 1-1 console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1-2 a. let objNew = {...obj} b. let objNew = Object.assign({}, obj) 2-1 console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000 2-2 let objNew = JSON.parse(JSON.stringify(obj)) --> <!-- 36: Tofu Tseng 報數兩個字突然消失 XD 1-1. 123, true 1-2. let objNew = obj; 改成:let objNew = {...obj}; 就可以了。 1-1. false 1-2. 2000 let objNew = JSON.parse(JSON.stringify(obj)); 改成這樣才不會影響到,這才是實際的深拷貝。 --> <!--37: YOYO 1-1 123,true 1-2 淺層拷貝- way1: let objNew = {...obj}; way2: let objNew = Object.assign({},obj); 2-1 false,2000 2-2 深層拷貝- 第一步驟先將物件使用JSON.stringify()為字串, 第二步再將字串使用JSON.parse轉為物件 let objNew = JSON.parse(JSON.stringfy(obj)); --> <!-- 38: Wendy Li 1-1. 請問以下的輸出結果為何? console.log(obj.amounts); // 123 1-2. 輸出結果為 true 還是 false? console.log(obj === objNew); // true 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? let copyObj = Object.assign({}, obj) copyObj.amounts = 123 console.log(obj === copyObj) // false 2-1. 請問以下的輸出結果為何? 輸出結果為 true 還是 false? console.log(obj2 === objNew2); // false 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? 方法一: let objNew3 = JSON.parse(JSON.stringify({obj2})) // 使用偽深拷貝 方法二: let objNew4 = cloneDeep(obj2) function cloneDeep(obj){ if( typeof obj !== 'object' || Object.keys(obj).length === 0 ){ return obj } let resultData = {} return recursion(obj, resultData) } function recursion(obj, data={}){ for(key in obj){ if( typeof obj[key] == 'object' && Object.keys(obj[key].length>0 )){ data[key] = recursion(obj[key]) }else{ data[key] = obj[key] } } return data } --> <!-- 39:RitaHuang (1) 1-1. console.log(obj.amounts) // 123 console.log(obj === objNew) // true 1-2. 可以將 let objNew = obj; 修改為 let objNew = {...obj}; // 深拷貝 let objNew = JSON.parse(JSON.stringify(obj)); (2) 2-1. console.log(obj === objNew); // 結果為 false objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); // 結果為 2000 2-2. // 深拷貝 可以將 let objNew = {...obj}; 修改為 let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 40: Echo Hui 1-1 請問以下的輸出結果為何? console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1-2 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? let objNew = Object.assign({}, obj); 2-1 請問以下的輸出結果為何? console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000 2-2 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? let objNew = JSON.parse(JSON.stringify(obj)) --> <!-- 41: Valerie 1-1 123, true 1-2 let objNew = {...obj} 2-1 false, 2000 2-2 let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 42: jimmyFang (1) 1-1: console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1-2: 淺拷貝 將 objNew 修改為以下 a. let objNew = {...obj}; b. let objNew = object.assign( {} , obj); (2) 2-1: console.log(obj === objNew); // false 已淺拷貝,分別為兩個存放在不同記憶體位置的物件 console.log(obj.innerObj.amounts); // 2000 淺拷貝,只能複製第一層 ,其他層仍然可以修改 2-2: 深拷貝 let objNew = JSON.parse(JSON.stringifyS(obj)); --> <!-- 43: 涂阿銘 1-1 console.log(obj.amounts); //123 console.log(obj === objNew); //true 1-2 let objNew = {...obj}; // 改成{...obj} 2-1 console.log(obj2 === objNew2); // false console.log(obj2.innerObj.amounts); // 2000 2-2 let objNew2 = JSON.parse(JSON.stringify(obj2)); // 改成深層複製 --> <!-- 44: Alicia Lo 1-1:console.log(obj.amounts); // 輸出結果:123 console.log(obj === objNew); // 輸出結果:true 1-2:objNew = {...obj};//使用淺層拷貝 objNew.amounts = 123; console.log(obj === objNew);// 輸出結果:false 2-1:console.log(obj === objNew); // 輸出結果:false console.log(obj.innerObj.amounts); // 輸出結果:2000 2-2: let objNew= (JSON.parse(JSON.stringify(obj)));//先轉成字串,破壞傳參考特性,再轉回物件 objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); //輸出結果:1000 --> <!-- 45: Ed Huang 1-1. 請問以下的輸出結果為何? console.log(obj.amounts); //123 1-2. 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? let objNew = {...obj}; // 展開 淺拷貝 console.log(obj === objNew); //false 2-1. 請問以下的輸出結果為何? console.log(obj.innerObj.amounts); // 2000 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? let objNew = JSON.parse(JSON.stringify(obj)); // 深層拷貝 --> <!-- 46: Eric-小偉哥 (1-1) console.log(obj.amounts); //123 console.log(obj === objNew); //true (1-2) 將第5行改為 (a)let objNew = {...obj}; (b) let objNew = Object.assign({}, obj); (2-1) console.log(obj === objNew); //false console.log(obj.innerObj.amounts); //2000 (2-2) 利用深拷貝修正,如下第一行 ```javascript= let objNew = JSON.parse(JSON.stringfy(obj)); //<-- 利用深拷貝修正 console.log(obj === objNew); // 輸出結果為 true 還是 false? objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); // 輸出結果為何? ``` ---> <!-- 47: Wei (1) 1-1. 請問以下的輸出結果為何? console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1-2. 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? let objNew = {...obj}; //複製一個全新的物件 淺拷貝 (2) 2-1. 請問以下的輸出結果為何? console.log(obj === objNew); // false? console.log(obj.innerObj.amounts); // 2000 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? let objNew = JSON.parse(JSON.stringify(obj)); //深拷貝 --> <!--48:Chiang (1) 1-1: console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1-2: let objNew = Object.assign({}, obj); (2) 2-1: console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000 2-2: let objNew = JSON.parse(JSON.stringify(obj)); --> <!--49:Carol (1)1-1. 123 (1)1-2. let objNew = {...obj}; (2)2-1. false (2)2-2. objNew.innerObj = {...obj.innerObj}; --> <!-- 50: Echo 1-1. 請問以下的輸出結果為何? 123 1-2. 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? let objNew = Object.assign({},obj); console.log(obj === objNew); //false 2-1. 請問以下的輸出結果為何? 2000 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 51:Eva lin 1.1 console.log(obj.amounts); //123 console.log(obj === objNew); //true 1.2 let objNew ={...obj}; //淺拷貝 2.1 2000 2.2 let objNew = JSON.parse(JSON.stringify(obj)); <!-- 52: Jessie Cheng 1-1. 123 true 1-2. let objNew = Object.assign({}, obj); 2-1. false 2000 2-2. objNew.innerObj = { ...obj.innerObj }; --> <!-- 53:Stacey Huang 1-1. 請問以下的輸出結果為何? A:123; true; 1-2. 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? A:let objNew = {...obj}; 2-1. 請問以下的輸出結果為何? A:false ; 2000 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? A:let objNew = JSON.parse(JSON.stringify(obj)) --> <!--54:Jrhung-Tsai 1-1 console.log(obj.amounts); //123 console.log(obj === objNew); //true 1-2 let objNew = {...obj}; 2-1 console.log(obj === objNew); //false console.log(obj.innerObj.amounts); //2000 2-2 改成let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 55: Eyan (1) 1-1: console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1-2: let objNew = Object.assign({}, obj); (2) 2-1: console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000 2-2: let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 56: Lin (1) 1-1: console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1-2: let objNew = {...obj}; (2) 2-1: console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000 2-2: let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 57: 李重炫 (1) 1-1: console.log(obj.amounts); // Ans:123 console.log(obj === objNew); // Ans:true 1-2: let objNew = {...obj}; (2) 2-1: console.log(obj === objNew); // Ans:false console.log(obj.innerObj.amounts); // Ans:2000 2-2: let objectNew = JSON.parse(JSON.stringfy(obj)); --> <!-- 58: twoz (1) 1-1: console.log(obj.amounts); // Ans:123 console.log(obj === objNew); // Ans:true 1-2: let objNew = {...obj}; (2) 2-1: console.log(obj === objNew); // Ans:false console.log(obj.innerObj.amounts); // Ans:2000 2-2: let objectNew = JSON.parse(JSON.stringfy(obj)); --> <!-- 59: 家齊 1-1:console.log(obj.amounts); //123 console.log(obj === objNew); //true,因為objNew為新設的變數與原本的物件共同取用同記憶體位置的資料 1-2: (1)用淺拷貝: objNew = {...obj}; (2)用深拷貝: objNew = JSON.parse(JSON.stringify(obj)); 2-1: console.log(obj === objNew); //false objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); //2000,因為用淺拷貝,只複製一層物件,若有第二層則仍與原本記憶體位置共享 2-2: 用深拷貝:let objNew = Json.parse(Json.stringify(obj)); --> <!-- 60:Allen chou let obj = { title: '錢錢', amounts: 66666, } let objNew = obj; objNew.amounts = 123; console.log(obj.amounts); // 輸出結果為何? ->123 console.log(obj === objNew); // 輸出結果為 true 還是 false? ->true 1-2. 如果希望 console.log(obj === objNew); 的結果為 false,則可以如何修改? objNew = {...obj};//淺 objNew =JSON.parse(JSON.stringify(obj));//深 objNew = Object.assign({}, obj);//淺 2-1. 請問以下的輸出結果為何? 2-2. 如果希望調整 objNew.innerObj 時不會影響到 obj,則可以如何修改? let obj = { title: '錢錢', amounts: 66666, innerObj: { title: '私房錢', amounts: 1000 } } let objNew = {...obj}; console.log(obj === objNew); // 輸出結果為 true 還是 false? //true objNew.innerObj.amounts = 2000; console.log(obj.innerObj.amounts); // 輸出結果為何? 2000 use->objNew =JSON.parse(JSON.stringify(obj));//深 --> <!-- 61:林晉 1-1. 123 console.log(obj === objNew); // 輸出結果為 true 還是 false? true 1-2: let objNew = {...obj}; 2-1. false 2000 2-2. let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 62:Carol (1)1-1.  123,true (1)1-2.  第5行改成 let objNew = {…obj}; (2)  2-1. false,2000 2-2. 第9行改成 let objNew = {...obj}; objNew. innerObj = {...obj. innerObj}; --> <!-- 63:moitw (1) 123, true let objNew = {...obj} ; (2) 2-1 2000, false 2-2 let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 64: Emily Hsi (1) 1-1 console.log(obj.amounts); // 123 console.log(obj === objNew); // true 1-2 let objNew = Object.assign({}, obj); (2) 2-1 console.log(obj === objNew); // false console.log(obj.innerObj.amounts); // 2000 2-2 let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 65: Amber 1-1 : console.log(obj.amounts)//123 console.log(obj === objNew)//true 1-2: let objNew = {...obj}; 2-1: console.log(obj === objNew)//false console.log(obj.innerObj.amounts)//2000 2-2: let objNew = JSON.parse(JSON.stringify(obj)); --> <!-- 66:MM 1-1:123、true 1-2:let objNew = { .. obj }; 2-1:falsue、2000 2-2: let objNew = JSON.parse(JSON.stringify(obj)); let objNew = JSON.parse(JSON.stringify(obj)); -->