# JavaScript Template JavaScript模板常被用來解決重複編寫程式碼的問題(尤其是處理字符串和物件)。不過ES6推出後,工程師不用在使用第三方套件就已經有相當多的語法糖可以使用。 >語法糖(Syntactic sugar),也譯為糖衣語法,是由英國計算機科學家彼得·蘭丁發明的一個術語,指計算機語言中添加的某種語法,這種語法對語言的功能並沒有影響,但是更方便程式設計師使用。語法糖讓程序更加簡潔,有更高的可讀性。 ## ES6 #### Template Literals 字串樣版 `${}` - 多行字串 - 字串中插入變數 - 字串中插入表達式 ```+ //過去寫法 let fruit = [apple,banana,coconut] let originString = '我喜歡吃 ' + fruit[1]; // 單行寫法: 用+連接字串與變數 let originUl = '<ul>\ <li>我喜歡吃 ' + fruit[1] + '</li>\ <li>我喜歡吃 ' + fruit[2] + '</li>\ <li>我喜歡吃 ' + fruit[3] + '</li>\ </ul>'; // 多行寫法: 用\表示換行 //ES6寫法 let ES6String = `我喜歡吃 + ${fruit[1]}`; //使用反引號``包住字串範圍 //${變數} let ES6Ul = `<ul> <li>我喜歡吃${fruit[1]}</li> <li>我喜歡吃${fruit[2]}</li> <li>我喜歡吃${fruit[3]}</li> </ul>`; let ES6Expression=`${fruit.map(fruit => `<li>我喜歡吃 ${fruit}</li>`).join('')}` ``` #### object shorthand 物件縮寫 - 物件縮寫 - 物件屬性為變數 ```+ let newToy = '巴斯光年' const oldToys = { Sheriff Woody: '胡迪警長', Buzz Rex: '抱抱龍', Mr. Potato Head: '蛋頭先生', // ... } let others = 'toystore'; let otherToys = '三眼怪'; // 過去寫法 const ToyStory = { newToy: newToy, //變數 oldToys: oldToys, //變數物件 welcomeParty: function () { console.log('我們都是一家人') //物件函式 } } // ES6寫法 const ToyStory = { newToy, oldToys, welcomeParty(){ console.log('我們都是一家人') } [others]: otherToys //物件屬性可以是變數! } ``` #### ... 的用法 [詳細看這](https://hackmd.io/c3oVqPPARmqUSKBO-XQ0LQ?view#%E2%80%A6-Spread-Operator--Rest-Operator) #### 大家期待的問題 ```+ // 01 const [a] = 'hello' console.log(a) //a=h // 02 const { b } = 'hello' const { c ='hello' } = 'hello' const [ d ='hello' ] = 'hello' console.log(b,c,d) //undefind hello h // 03 function func({e, f}) { return e + f } func({e:2,f:3}) // e=2 f=3 return 5 // 04 function func({g = 3, h}) { return g + h } func({g: 1, h: 2}) // 3 func({h: 2}) // 5 func({g: 1}) // NaN //數字遇上undefined就會是NaN ``` ## 附錄: ECMA > ECMA 是 European Computer Manufacturers Association (歐洲電腦製造商協會) 的簡稱,協會在 1961 年正式成立,是資訊和通訊系統的標準組織。 > 後來為了因應國際化,在 1994 年將名稱改為 Ecma International (Ecma 國際)。 #### ECMA規範包括: * ECMA-119:CD-ROM 格式 * ECMA-334:C# 語言規範 * ECMA-408:Dart 語言規範 * ECMA-404:JSON * ECMA-262:ECMAScript 語言規範 * ...... > ECMA規範制定流程是由包括瀏覽器廠商在內的各方組成,開會推動JavaScript提案。 > 最終入選後還會再經歷以下四個階段: > * 【Stage 1】proposal: 至少一名成員提供的正式提案文件,該文件包括API實例。 > * 【Stage 2】draft: 功能規範的初始版本,該版本包含功能規範的兩個實驗實現。 > * 【Stage 3】candidate: 提案規範通過審查並從廠商那裡收集回饋。 > * 【Stage 4】finished: 提案準備加入ECMAScript。 **ECMAScript** ECMAScript 是由 Netscape 的 **Brendan Eich** 發明的,最早出現在 Netscape 的 Navigator 2.0 瀏覽器中。從 IE 3.0 開始,很多瀏覽器開始使用 ECMAScript。 ECMAScript 是 JavaScript 的標準,目的是讓不同瀏覽器之間能根據 spec 來實作。當 ECMAScript 發布第三版 (即 ES3) 之後,成為當時所有瀏覽器支援的程式語言。 ![Brendan Eich](https://i.imgur.com/LP0LY4j.png) #### 參考資料 https://www.w3schools.com/js/js_es6.asp https://eyesofkids.gitbooks.io/javascript-start-from-es6/content/part4/destructuring.html https://wcc723.github.io/javascript/2017/12/23/javascript-short-hand/ https://hsueh-jen.gitbooks.io/webcrawler/content/lesson-3-pa-chong-tao-jian/lodash.html https://www.ruanyifeng.com/blog/2011/06/birth_of_javascript.html