中文文檔javascript
目前ES10仍然只是一個草案,但它確實添加了一些有趣的東西。java
BigInt是第7種原始類型node
typeof 10;
⇨ 'number'
typeof 10n;
⇨ 'bigint'
複製代碼
+它返回一個迭代器而不是數組,迭代器自己頗有用。android
+可使用擴展運算符...將迭代器轉爲數組。web
+它避免使用帶 /g標誌的正則表達式...當從數據庫或外部源檢索未知的正則表達式並與古老的RegEx對象一塊兒使用時很是有用。正則表達式
element.addEventListener('click', async () => {
const module = await import('./api-scripts/button-click.js')
module.clickEvent()
})
複製代碼
let multi = [1,2,3,[4,5,6,[7,8,9,[10,11,12]]]];
multi.flat(); // [1,2,3,4,5,6,Array(4)]
multi.flat().flat(); // [1,2,3,4,5,6,7,8,9,Array(3)]
multi.flat().flat().flat(); // [1,2,3,4,5,6,7,8,9,10,11,12]
multi.flat(Infinity); // [1,2,3,4,5,6,7,8,9,10,11,12]
複製代碼
array.flatMap(v => [v, v * 2])
[1, 2, 2, 4, 3, 6, 4, 8, 5, 10]
複製代碼
let obj = { apple : 10, orange : 20, banana : 30 };
let entries = Object.entries(obj);
entries;
(3) [Array(2), Array(2), Array(2)]
0: (2) ["apple", 10]
1: (2) ["orange", 20]
2: (2) ["banana", 30]
let fromEntries = Object.fromEntries(entries);
{ apple: 10, orange: 20, banana: 30 }
複製代碼
let greeting = " Space around ";
greeting.trimEnd(); // " Space around";
greeting.trimStart(); // "Space around ";
複製代碼
function () { console.log('Hello there.'); }.toString();
⇨ function () { console.log('Hello there.'); }
複製代碼
在ES10中,Catch Error Binding是可選的 你如今能夠跳過 error變量:sql
try {
JSON.parse(text);
return true;
}
catch
{
return false;
}
複製代碼
ES10以前全局 this沒有標準化。數據庫
生產代碼中,你必須手動添加以下代碼來標準化多個平臺的全局對象。編程
var getGlobal = function () {
if (typeof self !== 'undefined') { return self; }
if (typeof window !== 'undefined') { return window; }
if (typeof global !== 'undefined') { return global; }
throw new Error('unable to locate global object');
};
複製代碼
但即便這樣也並不老是奏效。因此 ES10添加了 globalThis對象,從如今開始應該在任何平臺上訪問全局做用域:
// Access global array constructor
globalThis.Array(0, 1, 2);
⇨ [0, 1, 2]
// Similar to window.v = { flag: true } in <= ES5
globalThis.v = { flag: true };
console.log(globalThis.v);
⇨ { flag: true }
複製代碼
基本上統一了JavaScript在服務器端的執行方式。
$ ./index.js
複製代碼
代替:
$ node index.js
複製代碼
新的語法字符#(hash tag)如今直接在類主體做用域以及 constructor和類方法裏被用來定義 variables, functions, getters和 setters
我的認爲可讀性差,可是語法類C++
class Raven extends Bird {
#state = { eggs: 10};
// getter
get #eggs() {
return state.eggs;
}
// setter
set #eggs(value) {
this.#state.eggs = value;
}
#lay() {
this.#eggs++;
}
constructor() {
super();
this.#lay.bind(this);
}
#render() {
/* paint UI */
}
}
複製代碼
2014 年到 2018混戰後, React/Vue/Angular三足鼎立。不管 React 發佈 v16,增長 Fiber 和 Hooks,仍是 Vue 3.0 發佈,支持原生 Class 的寫法,AngularJS 又發佈了 v6 和 v7 兩個版本,三大框架從寫法上愈來愈像,其實最終都是朝着 W3C WebComponents 標準走。
點評:標準化一直是技術發展的大趨勢。
框架和工程化基本探索穩定後,你們就開始思考如何更好的用,更簡單的用。目前,各家大廠都在前端技術棧思考如何選型和下降成本,統一技術棧。好比咱們團隊的tua等
點評:下降成本,統一技術棧帶來的好處不少,適合業務發展。
PWA 和 native app(移動應用)的核心區別在於如下幾點:
PWA 的一些關鍵點。
點評: 5G時代的到來,web離線獲取是趨勢
點評:野蠻發展期,與pwa同樣,隨着5G時代的到來,如何發展還有待檢驗
由於隨着前端團隊變大,規模化編程也必然依賴類型系統和麪向對象的。 TypeScript 落地很好,包容性更好:React 對.tsx 支持很是好,Vue 從 v2.5.0 以後對 ts 支持就很是好,Node.js(尤爲是 Egg.js、midway)對 ts 支持也很是好。
WebAssembly 是一種新的字節碼格式,目前主流瀏覽器都已經支持 WebAssembly。 和 JS 須要解釋執行不一樣的是,WebAssembly 字節碼和底層機器碼很類似,能夠快速裝載運行,所以性能相對於 JS 解釋執行而言有了極大的提高。 也就是說 WebAssembly 並非一門編程語言,而是一份字節碼標準,須要用高級編程語言編譯出字節碼放到 WebAssembly 虛擬機中才能運行, 瀏覽器廠商須要作的就是根據 WebAssembly 規範實現虛擬機。
有了 WebAssembly,在瀏覽器上能夠跑任何語言。從 Coffee 到 TypeScript,到 Babel,這些都是須要轉譯爲 js 才能被執行的,而 WebAssembly 是在瀏覽器裏嵌入 vm,直接執行,不須要轉譯,執行效率天然高得多。
應用例子:《AutoCAD & WebAssembly: Moving a 30 Year Code Base to the Web》,即經過 WebAssembly,讓不少年代久遠的 C++ 代碼在 Web 上能夠運行,而且保證了執行效率。web.autocad.com/