# Javascript學什麼? ### Array.forEach() 若我需要針對一個陣列內的所有資料逐一更改,可以用此方法來免於重複手段,範例如下: ``` let student = ["大雄","靜香","胖虎","小夫"]; student.forEach(function(item,index){ student[index] += "同學"; }); console.log(student); //['大雄同學','靜香同學','胖虎同學','小夫同學'] ``` --- # 學習筆記 ``` let ordered = ["牛肉串","雞皮","羊肉串","花椰菜"]; let bills = ordered.map(function(item,index){ switch(ordered[index]){ case "牛肉串": case "雞肉串": case "豬肉串": case "羊肉串": return 50; case "雞屁股": case "雞心": case "雞皮": return 45; case "花椰菜": case "節瓜": case "青椒": return 40; } }); let sum = 0; for (let i = 0; i < bills.length; i++) { sum += bills[i]; } console.log(sum); ``` 物件的屬性宣告在function之中要記得寫完整! ``` friends (x facebookProfile.friends (o ``` ``` let facebookProfile = { name : "Wilson", friends : 20, messages : ["Hello!","Hi"], postMessage : function(message){ facebookProfile.messages.push(message); }, deleteMessage : function(index){ facebookProfile.messages.splice(index,1); }, addFriend : function(){ facebookProfile.friends++; }, removeFriend : function(){ facebookProfile.friends--; } } ``` ### Advanced array 有空來寫一下關於array常用的方法 array.splice(index,1) array.reduce() array.filter() 關於pass by reference ``` let array1 = [1,2,3]; let array2 = array1; array2 = [].concat(array1); // ``` > 忘記Array有什麼用法?參考這篇 > https://sdras.github.io/array-explorer/ ### Advenced object 關於pass by reference ``` let obj1 = { name: 'ONE', weapon: { name: '單手劍' } }; let obj2 = obj1; //將obj1的記憶體位址指向obj2 let obj3 = {...obj1}; //clone一份obj1打包給obj3,僅複製第一層 let obj4 = JSON.parse(JSON.stringify(obj1)); //clone一份obj1打包給obj4,完全複製 obj2.name = 'TWO'; //變更obj2的屬性及obj2中物件的屬性 obj2.weapon.name = '鐵斧'; console.log(obj1,obj2,obj3,obj4) obj1 //因為obj2指向obj1的記憶體位址,故變更也會影響obj1 {name :'TWO' weapon {name :'鐵斧'} } obj2 {name :'TWO' weapon {name :'鐵斧'} } obj3 //因為是clone的物件,故不會被obj1的改變受影響,但是物件中的物件還是會被影響 {name :'ONE' weapon {name :'鐵斧'} } obj4 //他是完全獨立的物件,故不會被obj1影響 {name :'ONE' weapon {name :'單手劍'} } ``` ### Advanced function #### closures What doe's `addToTenAndThree` return? ``` const addTo = x => y => x + y; const addToTen = addTo(10); const addToTenAndThree = addToTen(3); ``` :::spoiler solution ``` addTo = x => y => x + y //看作addTo(x) => y => x + y addTo(x) => y => x + y //看作addTo(x)(y) => x + y ``` > 關於colsures參考這篇 > https://developer.mozilla.org/zh-TW/docs/Web/JavaScript/Closures ::: #### currying #### compose ### DOM ### 前、後端的資料傳遞 query string (不安全的 body form data (不安全的 JSON (JavaScript Object Notation) 是種適用於client & server之間傳遞的文字格式,可以被各種語言閱讀,轉換成前後端各自的語言來運行 ``` JSON.stringify() /將Javasvript物件或值轉換成JSON格式 JSON.parse() /將JSON格式轉換成Javascript物件或值 ``` ```javascript= // 暫存 const temp = 'string'; ``` ```jsonld= { } ``` > 關於箭頭函數表示?參考這篇 > https://www.casper.tw/javascript/2017/12/21/javascript-es6-arrow-function/ ### AJAX AJAX 的全名是:Asynchronous JavaScript and XML,有沒有看到開頭那個 A 的全名是:Asynchronous,就代表是非同步送出 Request 的意思。 Promise > 討論關於synchronous,asynchronous,blocking,non-blocking > 參考這篇 > https://github.com/aszx87410/blog/issues/49 # React學什麼? 透過NPM下載create-react-app套件,以實現快速建構開發環境(此套件是基於webpack + ES6) 使用以下指令 ``` npx create-react-app my-app cd my-app npm start ``` 下載完成切換該目錄後執行它即可! > React v18以後,不再使用ReactDOM.render,使用ReactDOM.createRoot取代