中文文档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/