每日前端夜话(0x02):ECMAScript 2016,2017和2018中所有新功能的示例(下)
Posted 前端先锋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日前端夜话(0x02):ECMAScript 2016,2017和2018中所有新功能的示例(下)相关的知识,希望对你有一定的参考价值。
原文:https://medium.freecodecamp.org/here-are-examples-of-everything-new-in-ecmascript-2016-2017-and-2018-d52fa3b5a70e
翻译:疯狂的技术宅
ECMAScript目前正在最终草案中,将于2018年6月或7月结束。下面介绍的所有功能都在第4阶段,并将成为ECMAScript 2018的一部分。
1.共享内存和Atomics
这是一个巨大的,非常先进的功能,是JS引擎的核心增强功能。
主要思想是为JavaScript提供某种多线程功能,以便JS开发者可以通过自己管理内存——而不是让JS引擎管理内存——来编写高性能的并发程序。
这是通过一种名为SharedArrayBuffer(https://developer.mozilla.org/en-US/docs/Web/javascript/Reference/Global_Objects/SharedArrayBuffer)的新型全局对象完成的,该对象实质上将数据存储在共享内存空间中。因此,这些数据可以在主JS线程和Web工作线程之间共享。
到目前为止,如果我们想在主JS线程和Web工作者之间共享数据,就必须复制数据并使用postMessage
将其发送到另一个线程。以后不会再这样了!
只需使用SharedArrayBuffer,主线程和多个Web工作线程都可以立即访问数据。
但是在线程之间共享内存会导致竞争条件。为了帮助避免竞争条件,引入了“Atomics”全局对象(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Atomics)。 Atomics提供了各种方法,使得线程在使用其数据时锁定共享内存。它还提供了安全地更新共享内存中数据的方法。
建议通过某个库使用此功能,但是现在没有基于此功能构建的库。
如果你有兴趣,我建议阅读:
From Workers to Shared Memory— lucasfcosta
(http://lucasfcosta.com/2017/04/30/JavaScript-From-Workers-to-Shared-Memory.html)
A cartoon intro to SharedArrayBuffers — Lin Clark
(https://hacks.mozilla.org/category/code-cartoons/a-cartoon-intro-to-sharedarraybuffers/)
Shared memory and atomics — Dr. Axel Rauschmayer
(http://2ality.com/2017/01/shared-array-buffer.html)
2.删除了标记模板文字限制
首先,我们需要澄清“标记模板文字”是什么,以便我们更好地理解这个功能。
在ES2015 +中,有一个称为标记模板文字的功能,允许开发人员自定义字符串的插值方式。 例如,在标准方式中,字符串被插入如下…
下面的示例演示自定义“标记”函数greet
,根据当前时间返回例如“Good Morning!” “Good afternoon!”之类的字符串。
现在我们讨论了“Tagged”函数是什么,许多人想要在不同的领域中使用此功能,例如在终端中使用命令行或HTTP请求来拼接URIs等等。
⚠️标记字符串字符的问题
问题是在ES2015和ES2016规范不允许使用转义字符,如“u”(unicode),“x”(十六进制),除非它们看起来完全像u00A9
或u{2F804}
或xA9
。
因此,如果你有一个Tagged函数在内部使用其他领域的规则(如终端的规则),可能需要使用ubla123abla这样的字符,它看起来一点也不像u0049或u {@F804}的样子,最后你将会得到一个语法错误。
不过在ES2018中,只需要Tagged函数返回一个具有“cooked”属性(赋值为“undefined”)和“raw”属性( 你想要的任何内容)的对象即可。
1function myTagFunc(str) {
2 return { "cooked": "undefined", "raw": str.raw[0] }
3}
4
5var str = myTagFunc `hi ubla123abla`; //call myTagFunc
6str // { cooked: "undefined", raw: "hi \unicode" }
3.正则表达式的“dotall”标志
目前在正则表达式中,虽然点(“.”)应该与单个字符匹配,但它不能与
f
等新行字符匹配。
例如:
1//Before
2/first.second/.test('first
second'); //false
这个功能使点运算符可以匹配任何单个字符。 为了确保不会破坏任何内容,我们需要在创建正则表达式时使用s
标志才能使其正常工作。
1//ECMAScript 2018
2/first.second/s.test('first
second'); //true Notice: /s 以上是关于每日前端夜话(0x02):ECMAScript 2016,2017和2018中所有新功能的示例(下)的主要内容,如果未能解决你的问题,请参考以下文章
一文学懂 TypeScript 的类型 [每日前端夜话0x39]