--- tags: JavaScript 實戰班, Day9 --- # 設計魔劍三組 ## 6/18:Day 9 漂亮阿姨收到轉帳資料後並不清楚是小明所轉帳的,除了對於來路不明的費用感到困擾,也想找出究竟是誰匯款給她,因此報警處理此事件。 小明在家中準備打電話跟漂亮阿姨說明此事時,門外卻來了正準備打聽「漂亮阿姨不明款項案件」的警察...。 警察:「請問小明先生在家嗎?」 小明:「我是小明」 警察:「漂亮阿姨最近有不明的款項,請問你知道是誰匯的呢?」 小明一心想要親自告訴漂亮阿姨,因此沒有承認卻激動的回覆:「不明款項!?那才不是不明款項勒!!」 警察:「為什麼你一口咬定不是不明款項呢?」 小明:「說不是就不是!」 警察:「看來你最可疑,搜!」 心想不妙的小明,一定要避免這件事情曝光,但匯款紀錄就在家中遲早會被搜出,請協助小明度過這次難關。 物件、陣列有傳遞參考的特性,因此兩個相同參考的物件、陣列最後比對時會完全相等,請查看影音課程中的「物件的參考特性」相關章節解決此問題: ### 任務 - 僅能調整 `var MingMoneyTransferRecord = ...` 後方的賦予方法,使兩個變數的參考不同 - 使最後的 `MingMoneyTransferRecord === Auntie.depositRecord` 的結果為 false - `MingMoneyTransferRecord` 格式必須不變 ### 挑戰項目: - 組員間的方法盡可能都不同 ```js var Auntie = { name: '漂亮阿姨', age: 21, deposit: 10000, depositRecord: [ { title: '小明匯款紀錄', amounts: 77777 } ] }; var MingMoneyTransferRecord = Auntie.depositRecord; console.log(MingMoneyTransferRecord); console.log(MingMoneyTransferRecord === Auntie.depositRecord); ``` 重點觀念: - 物件參考觀念 - 物件解除參考運用 --- ## Ryan ```javascript= var Auntie = { name: '漂亮阿姨', age: 21, deposit: 10000, depositRecord: [ { title: '小明匯款紀錄', amounts: 77777 } ] }; var MingMoneyTransferRecord = Object.assign({}, Auntie); console.log(MingMoneyTransferRecord); console.log(MingMoneyTransferRecord === Auntie.depositRecord); ``` > 助教回覆:作業做的不錯喔 :+1: 有正確複製 Auntie 物件,不過本次作業, 可以嘗試 JSON 這個方法喔,卡斯伯老師有公告:資料結構要相同,但是"參考"要不同 ~ 因為 JSON 是直接轉字串再轉回物件,因此記憶體指向不同, 所以使用 JSON 複製出來的物件和原本物件 "參考" 是不同的,如下面範例。 https://codepen.io/Isshin/pen/gOPgWKB?editors=1111 --- ## Vivian Chiang ```javascript= var Auntie = { name: '漂亮阿姨', age: 21, deposit: 10000, depositRecord: [ { title: '小明匯款紀錄', amounts: 77777 } ] }; // var MingMoneyTransferRecord = Auntie.depositRecord; var MingMoneyTransferRecord = JSON.parse(JSON.stringify(Auntie.depositRecord)); console.log(MingMoneyTransferRecord); console.log(MingMoneyTransferRecord === Auntie.depositRecord); ``` > 助教回覆:作業做的很好哦,很正確唷 :+1: --- ## Yoyo ```javascript= var Auntie = { name: '漂亮阿姨', age: 21, deposit: 10000, depositRecord: [ { title: '小明匯款紀錄', amounts: 77777 } ] }; var MingMoneyTransferRecord = [...Auntie.depositRecord] console.log(MingMoneyTransferRecord); console.log(MingMoneyTransferRecord === Auntie.depositRecord); ``` > 助教回覆:作業做的不錯喔 :+1: 有正確複製 Auntie.depositRecord 物件,不過本次作業, 可以嘗試 JSON 這個方法喔,卡斯伯老師有公告:"資料結構"要相同,但是"參考"要不同 ~ 因為 JSON 是直接轉字串再轉回物件,因此記憶體指向不同, 所以使用 JSON 複製出來的物件和原本物件 "參考" 是不同的,如下面範例。 https://codepen.io/Isshin/pen/gOPgWKB?editors=1111 --- ## ClareDes. ```javascript= var Auntie = { name: '漂亮阿姨', age: 21, deposit: 10000, depositRecord: [ { title: '小明匯款紀錄', amounts: 77777 } ] }; var MingMoneyTransferRecord = Auntie.depositRecord.slice(); console.log(MingMoneyTransferRecord); console.log(MingMoneyTransferRecord === Auntie.depositRecord); ``` > 助教回覆:作業做的不錯喔 :+1: 有正確複製 Auntie.depositRecord 物件,不過本次作業, 可以嘗試 JSON 這個方法喔,卡斯伯老師有公告:"資料結構"要相同,但是"參考"要不同 ~ 因為 JSON 是直接轉字串再轉回物件,因此記憶體指向不同, 所以使用 JSON 複製出來的物件和原本物件 "參考" 是不同的,如下面範例。 https://codepen.io/Isshin/pen/gOPgWKB?editors=1111 --- ## Jerry ```javascript= var Auntie = { name: '漂亮阿姨', age: 21, deposit: 10000, depositRecord: [ { title: '小明匯款紀錄', amounts: 77777 } ] }; var MingMoneyTransferRecord = JSON.parse(JSON.stringify(Auntie.depositRecord)); console.log(MingMoneyTransferRecord); console.log(MingMoneyTransferRecord === Auntie.depositRecord); ``` > 助教回覆:作業做的很好哦,很正確唷 :+1: