ECMAScript 4:缺少的版本

2020-05-30 05:19:15

在您的构建工具中,您可能已经注意到您有一个ECMAScript 3目标,以及5和更高版本,但从来没有4。这是为什么?

我认为深入研究一下ECMAScript 4会很有趣,看看我们没有得到什么。

根据维基百科的说法,ECMAScript 4的初稿日期是1999年2月。原定的完工目标是2008年8月。

ECMAScript 4非常雄心勃勃,增加了大量被认为是ECMAScript 3中重要和缺失的功能。它还“修复”了前一版本中的一些东西,使其在各种方面向后不兼容。

ES4遇到了一堆争议,并且缺乏浏览器供应商的足够支持来发布,最终被放弃了。

2008年,该标准被宣布失效,ES3.1更名为ES5,这是对ECMAScript更为保守和渐进的更新。

最接近ES4的可能是Flash ActionScript3。在AS3发布期间,我们中的一些人认为Flash和Web最终会融合在一起。

有关ES4政治和历史的更多详细信息,请查看auth0博客上的这篇很棒的文章。

类最终在ES6中落地,但下面是它之前可能的样子:

类C{var val var number=500;const pi=3.14//A函数f(N){return n+val*2}//getters和setters函数set foo(N){val=n;}函数get foo(){return val;}}。

这里的语法非常不同,但另一个值得注意的是,这些类有属性和常量。字段声明目前还处于“实验阶段”,所以我们几乎跟上了这里的脚步。

另一件令人惊讶的事是,根本没有这回事。ES4不是默认的全局变量,而是在检查更高的作用域之前首先在类作用域中查找。

Prototype,在其原型上定义类成员。不确定用例是什么,但它就在那里。

ES4引入了接口,这是我们今天没有的(除非您使用Typescript):

它还具有类似于TypeScript和Union类型的type关键字。如下所示的打字密码:

默认情况下,ES4中的类型必须是精确类型,而不是超集。使用LIKE关键字可以降低限制:

在当前的ES中,我们有布尔值、对象、数组、Number、BigInt,但是ES4将引入:

在这些类型中,只有小数类型在今天的规划中,它最终可能看起来像这样:

要对如下字符串进行编码:你好,我的名字是";Evert";在ES4中,您可以使用三引号:

软件包有点像我们现在使用的模块。包可以导入,但与ES6模块不同的是,名称空间更像是一个全局命名系统。

据我所知,该标准没有定义名称空间和文件加载位置之间的关系。

泛型函数不是参数化函数,它们有点类似于TypeScript中的“重载函数”,但它们并不完全相同,而且功能更强大。

class foo{Generic function addItem(X);function addItem(x:int){}function addItem(x:number){}}。

在上面的示例中,我可以使用int或number调用addItem,并且将在运行时选择正确的实现。

E4X代表ECMAScript for XML,虽然这听起来可能不是很令人兴奋,但请看一段代码片段:

const myClass=';欢迎';;const name=';Evert';;const foo=<;div class={myClass}>;{";Hello";+name}<;/div&>;;

虽然与JSX不完全相同,但这可能是JSX起源故事的一部分,这一点变得越来越明显。

虽然ES4从未登陆,但E4X实际上可以在Firefox中工作,直到它在Firefox10中被移除。

让const作为块级常量的语法。在ES5和更高版本中,常量已经是块作用域。

因为ECMAScript 4会破坏向后兼容性,所以告诉浏览器将脚本解释为ES4将非常重要:

我希望这是Javascript中的一个有趣的观点,虽然我们正在慢慢赶上更新的ECMAScript版本和工具,如TypeScript和JSX预处理器,但我们仍然不太了解2007年的ECMAScript愿景。

也许如果ES4登陆,就会有更少的人需要像巴别塔、webpack和Tyescript这样的复杂构建工具。