# JS 的奇幻旅程 <br> ## JS 有分版本? 差在哪 [TOC] ---- Made by FanRende (030Mortal#5525) <img src="https://i.imgur.com/jzeVEIi.png" width="50%"> --- ## What is ECMAScript Javascript 出世後由於瀏覽器的百花爭鳴 因此 NetScape 將 JS 送到 ECMA 制定標準規範 ---- ### 版本 Original JavaScript -> ES1 ES2 ES3 (1997-1999) ~~Dead ES4 (2008)~~ The First Main Revision ES5 (2009) The Second Revision ES6 (2015) All Yearly Additions (2016, 2017, 2018, 2019, 2020) --- ## ES5 ### Strict mode At JS file begining or begining of a local scope ```javascript "use strict"; // or function funA() { "use strict"; } ``` This will cause an error when a variable not declared been used ---- ### **Declarative and Imperative** - Declarative - HOW to do something <span style="margin-left: 20vw"></span> ```javascript= var array = [3,2,1]; var total = 0; for( var i = 0 ; i <= array.length ; i ++ ){ total += array[i]; } ``` - Imperative - WHAT will happen <span style="margin-left: 20vw"></span> ```javascript= var array = [3,2,1]; array.reduce( function( previous, current ){ return previous + current; }) ``` ---- ```javascript Array.forEach(function(element) {}) Array.map(function(element) {}) Array.filter(function(element) {}) Array.reduce(function(accumulator, currentValue) {}) Array.indexOf(element) ... ``` --- ## ES6 ### const & let ### Template Literals - ES5: <span style="margin-left: 20vw"></span> ```javascript var str = 'Hello' + name + "!"; ``` - ES6: <span style="margin-left: 20vw"></span> ```tscript const str = 'Hello ${name}!'; ``` ---- ### Destructuring Assignment - 解構賦值 <span style="margin-left: 30vw"></span> ```javascript= const arr = [1, 2, 3]; const obj = {d: 1, e: 2, f: 3}; const [a, b, c] = arr; // a = arr[0], b = arr[1], c = arr[2] const {d, e, f} = obj; // d = obj.d, e = obj.e, f = obj.f ``` ### Classes ---- ### Modules - export <span style="margin-left: 20vw"></span> ```javascript // moduleTest.js const numA = 19954465; const funcB = function() { alert("funcB"); } export default {numA, funcB}; // vs export {numA, funcB}; ``` - import <span style="margin-left: 30vw"></span> ```javascript import feature from moduleTest; console.log(feature.numA); // vs import {numA, funcB} from moduleTest; console.log(numA); ``` ---- ### **Arrow Functions** <span style="margin-left: 20vw"></span> ```javascript= const arr = [1, 2, 3]; const mapArr = arr.map(element => element * 2); ``` ```javascript= const arr = [1, 2, 3]; const mapArr = arr.map((element) => { element *= 2; console.log(element); return element; }); ``` ---- ### **Promise** - 範例 <span style="margin-left: 50vw"></span> ```javascript= const longTimePromise = new Promise((resolve, reject) => { const num = Math.random(); if(num > 0.5) setTimeout(resolve(num), 3000); else reject("Not a good number"); }); console.log("waiting"); longTimePromise.then(goodNum => { console.log(goodNum); }).catch(error => { console.log(error); }); ``` ---- <span style="position: absolute; left: 0; width: 55vw;"> ```javascript= function importFile() { let files = document.getElementById('import').files; if (files.length === 0) { return false; } let promiseArr = [...files].map(file => readFile(file)); Promise.all(promiseArr) .then(values => { console.log(values); }); } ``` ```javascript= function readFile(file) { return new Promise((resolve, reject) => { let reader = new FileReader(); reader.onload = () => { resolve(JSON.parse(reader.result)); }; reader.onerror = reject; return reader.readAsText(file); }); } ``` </span> --- ## ECMA 的制定流程 - Strawman - 想法 - Proposal - 提案(目的、解決方法) - Draft - 草案(根據提案撰寫 Spec) - Candidate - 撰寫規格(撰寫並確認 Spec,希望瀏覽器實作) - Finished - 審核完畢(規格確認完畢、有兩個以上的實作) - on Github - [ECMAScript](https://github.com/tc39/ecma262) - [ECMAScript proposals](https://github.com/tc39/proposals)
{"metaMigratedAt":"2023-06-17T18:36:10.641Z","metaMigratedFrom":"YAML","title":"JS 的奇幻旅程 JS 版本? 差在哪","breaks":true,"description":"簡介 ECMAScript 之 ES5、6","slideOptions":"{\"theme\":\"dark\",\"transition\":\"fade\",\"previewLinks\":true}","contributors":"[{\"id\":\"82f6b599-31b8-4112-9dc5-7d7b7d6a3ebb\",\"add\":6770,\"del\":2378}]"}
    438 views
   Owned this note