ES8即将发布,在ES7的基础上,ES8做了进一步的更新和优化,本文主要阐述ES8的5个重要特性。
1.Object.entries 和 Object.values
这是非常令人激动的改变,已经在 dojo 2 中共享了一些东西。
当一个对象被用作哈希过滤器时,通常需要知道该对象的值。这对大多数库和工具箱中找到的方法进行了标准化。
类似地,它通常用于迭代或序列化, 以便从对象或其项中拥有键/值对的数组。用 ES6 映射构造函数接受可迭代项,及其关联的项迭代器,这使得通过将项传递到映射构造函数从而更容易地将一个纯对象转换为映射。
Github 回顾: Object.values/Object.entries
2. String.prototype.padStart / String.prototype.padEnd
在 leftpad 事件发生后, 我们最终将字符串填充添加到语言中。这是我们在 dojo 中所拥有的, 并快速的为字符串填充进行了移植。
这是一个简单的功能, 正因为它是如此简单的实现, 导致在语言中被忽略了。但是我们很乐意把这当成语言的一部分。
Github 回顾:String.prototype.padStart / String.prototype.padEnd
3. Object.getOwnPropertyDescriptors
ES 缺少正确复制两个对象之间的属性的方法。这个方案解决了这个看似简单但复杂的问题, 并且它在几乎每个JS工具包或框架中都得到了执行。目前,这是一个阻碍,有效的不变性,ES类的真实组合,将有益于Decorators,但是相对于Object.assign,并不令人惊讶。
Github 回顾:Object.getOwnPropertyDescriptors
4.Async functions(异步函数)
在ES 中引入Promises和generators 极大的提高了我们如何通过改进与生成器并行的控制流结构来编写异步代码。
这一变化非常重要, 我们很高兴看到这种语言的实现, 因为它是我们编写异步代码的一个主要缺失部分。
Github 回顾:Async functions
5.Shared memory and atomics(共享内存和原子)
在完成的 ES8 功能中, 开发者要理解和使用这一特性所花费的时间应该是最多的。这是以非常小的方式实现的, 以说明 "此时提议只向ECMAScript添加低级原语;我们期望开发者社区能够将这些抽象概念集成在一起,有助于在特定的领域中使用。
注:原子对象提供了作为静态方法的原子操作。它们与 SharedArrayBuffer 对象一起使用。
Github 回顾:Shared memory and atomics
更新:ES8 中的两个功能
自从这篇文章第一次出版以来, ES8 / ES2017的另一个功能已经完成, 取消模板文字限制, 这使得将其他特定的域语言嵌入到模板文本更容易。
我们还从原始列表中排除了一个功能, 支持参数列表调用中的尾随逗号。虽然这不是语言的一个重大变化, 但它很可能会节约每个 javascript 使用者的时间, 并且希望能阻止每个行的参数或属性列表中的逗号。
下面是对ES9的展望和希望超越的地方!
l 可观测,反应式架构的关键 (Observables shim for Dojo 2)
l 全局, 一致地引用全局对象的标准 ((global shim for Dojo 2)dojo 2 的全局填充)
l trimStart / trimEnd,padStart / padEnd的模拟
l 导入, 从 es 模块标准中缺失的动态导入
l 类和属性decorators (已在TypeScript中实现)
l 异步迭代
l 单指令多数据(SIMD),它应该加速渲染和动画,如WebGL,Canvas等)
很高兴利用ES8中的功能,并期待今后更多的优化,看到JavaScript的不断改进和发展,让人为之一振!