后浪笔记一零二四

javascript

因为有人担忧 ES4 会“破坏 Web”,以及允许 客户端动态内容 的 AJAX(异步 JavaScript 和 XML)的诞生,这个标准被放弃了。受多种因素影响,jQuery 于 2006 年创建,主要是为 JavaScript 和 AJAX 的各种实现提供跨浏览器支持。ES-5 于 2009 年发布,最终成为了今天大多数人仍在引用的 JavaScript 事实标准。

2009 年诞生的 serverJS 旨在为 JavaScript 提供模块系统,后来它被重命名为 commonJS。它的目标是“在 Web 浏览器之外为 JavaScript 建立模块生态系统约定”。它可能与某些失败的 ES4 提案有关系。

同年晚些时候,RyanDahl 以此为基础创建了 Node.js。这是一个 JavaScript 运行时环境,使用了 Chrome V8 引擎和 libuv 等技术,并于 2009 年 5 月发布。

Node.js 彻底改变了 JS 语言,并帮助后者慢慢向编程语言靠拢,而逐渐摆脱了脚本语言的影子。在这一过程中有几件事很关键:分别是异步代码的回调(当时 JS 中已经有这个特性了)和模块系统(被拒绝的一个 ES4 提案),允许通过 require() 和 export 导入和导出多个文件;模块系统的特性最终催生了一个包管理器 NPM,它后来成为了最大的开源软件来源之一。Node.js API 还带有一些允许读取 / 写入文件的基本方法(例如 FS)和一种基础的 HTTP 方法,在创建一个简单服务器时它们都是必不可少的。

到 2015 年,最新的 JavaScript 标准 ECMAScript 6 发布了,它几乎实现了原来在 ES4 中计划的所有内容,只是去掉了一些重大更改,尤其令人瞩目的是引入了 let、const 和 symbol,而不是更传统的局部 / 全局变量和静态、强类型的声明。还有,这个方法 不像原来的 ES4 草案那样 可能会破坏 Web,而是引入了强大的 Babel,并让开发人员可以将 ES6+ 编译到 ES5(当时的通行标准),这样就能立即使用很多新特性了。

这些新的 JavaScript 特性包括 ESM,也就是 ECMAScript 模块(import/export,而不是通过 commonJS 的 require())、async/await、fetch browser API,还有很多 ES4 草案中没有的特性。

ES2015(ES6)

新增let const用于声明变量 const a = 1 ; let b = 2

新增变量解构 let [a, b, c] = [1, 2, 3];

加强对Unicode码的支持 ‘\u007A’ === ‘z’ // true

增加String的属性方法fromCodePoint、raw、codePointAt

增加了字符串的遍历器接口

for (let codePoint of 'foo') {
  console.log(codePoint)
}

增加字符串的实例方法includes()、 startsWith()、 endsWith()、repeat()、 padStart(),padEnd()、trimStart()、trimEnd() 、matchAll()、at()

修改了正则表达式的一些参数设置并新增了部分属性(太多,不详细列出来了就)

修改了函数的入参默认值的指定方式

增加了数组的解构方法(…运算符)

增加了对象的简洁写法 例如{test} 它等同于 {test:test}

增加了Set Map两个数据结构

增加Proxy构造函数(vue也是基于此做了升级)

增加Promise对象,用于解决异步编程

新增class关键字(语法糖),改变了了之前原型的书写方式

增加import export用于模块编程(之前都在用,只不过ES6之后,社区标准变成了官方标准)

当然,还有一些其它变化,相对来说用的更少一些,这里就不提了

二、ES2016(ES7)

新增数组的includes属性

引入了 ** 运算符 (指数运算符) 示例2 **3 //8

三、ES2017(ES8)

增加async await使得异步改同步成为可能,避免代码书写的来回嵌套

增加Object.values() Object.entries()

增加String padding:String.prototype.padStart、String.prototype.padEnd

允许函数参数列表结尾存在逗号

添加Object.getOwnPropertyDescriptors(): 获取一个对象的所有自身属性的描述符,如果没有任何自身属性,则返回空对象

新增SharedArrayBuffer 对象:用来表示一个通用的,固定长度的原始二进制数据缓冲区

新增Atomics 对象:提供了一组静态方法用来对 SharedArrayBuffer 对象进行原子操作

ES2018(ES9)

允许异步迭代:await可以和for…of循环一起使用,以串行的方式运行异步操作

添加Promise.finally()

修改了正则表达式的一些属性(这块比较细节,mdn上查一下当前怎么用就行了)

五、ES2019(ES10)

修改了try catch 的使用,catch不必再由入参

增加数组的flat flatMap方法 增加字符串的trimStart, trimEnd方法,分别是去掉首尾空格 增加Object.fromEntries方法,可以把对应数组转成对象 增加Function.prototype.toString()方便看到函数对应的内部代码 增加Symbol.prototype.description方法

示例 Symbol(’test’). description === ’test’ // true

对JSON对象的优化 JSON.superset 、JSON.stringify

六、ES2020(ES11)

增加Bigint用于大数计算

增加可选链 简化书写判断

增加 ?? 运算,如果左侧不为null或者undefined则返回 ??左侧内容

解决了 let num = number || 1 这种计算方式的bug

增加Promise.allSettled方法

支持import()函数用于异步加载

七、ES2021(ES12)

增加字符串的replactAll方法,之前要实现替换全部,需要使用正则表达式

增加Promise.any方法

新增了逻辑赋值操作符 ??=、&&=、 ||=

增加下划线 (_) 分隔符:使用 _ 分隔数字字面量以方便阅读 1_0000 === 10000 //true

以及WeakRefs、Intl.ListFormat、Intl.DateTimeFormat(这三个用的一般也不多,感兴趣的自行查阅)


专题:

本文发表于 2019-06-17,最后修改于 2019-06-17。

本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。


上一篇 « yarn 下一篇 » async-await语法糖

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image