在学习TypeScript过程中,是绕不开JavaScript的。老是被JavaScript的一些概念困扰了。
一、JavaScript的概念
JavaScript是一种解释型语言。我们用到的浏览器基本上都支持JavaScript。JavaScript作为世界上最流行的计算机语言之一,但它的标准却叫“ECMAScript”。
JavaScript是Netscape公司与Sun公司共同发布的,次年Navigator 2.0浏览器支持了JavaScript。
随后微软模仿JavaScript发布了一款相近的语言,取名为JScript,IE3.0支持了JScript。(在那时候微软的浏览器还是很流行的。写该文之前,微软已经砍掉了IE浏览器,令人嘘唏!)
\
Netscape公司为了抵制微软。网景公司将JavaScript提交给国际标准化组织ECMA。因为版权等原因。ECMA发布的JavaScript标准所以叫做“ECMAScript”。当然了,起这个名字也是突出发布者是ECMA。
\
由国际标准化组织ECMA来发布标准,那么Netscape公司和微软公司自然都得遵守了,不能自己搞自己一套语法。这跟C++标准类似。各种C++编译器都有自己具体的实现方式,但C++语言的标准,得要遵守。不能因为你搞特殊,程序员还你写专门的C++语言。微软的vs就被吐槽对C++标准支持不好,搞一些自己特殊的东西。以前年少无知,还以为这是C++标准写法呢!原来是微软自己搞出来的。你们能感受到自己千辛万苦写得代码,拷贝到Linux底下就运行不起来了。你编译器内部要怎么编译,是你自己的事情,但是你改变语法就过分了。
\
1997年ECMA发布了ECMAScript 1.0,就是JavaScript第一个国际化标准版本。
1998年6月,ECMAScript 2.0版发布。
1999年12月,ECMAScript 3.0版发布,成为JavaScript的通行标准,得到了广泛支持。
到2015年,到发布ECMAScript 6.0时,新功能提交太多了。往年都是先提交大版本,然后再逐步发布小版本。比如先发布6.0,后面成熟了再发布6.1,6.2,6.3。
语法有个标准,那么发布流程是不是也得有个标准?
2015年开始,每年6月份发布当年的正式版本。接下来修改内容要在这个版本的基础上修改,修改的内容敲定后,放到下一年的6月份发布。这样一年就发布一次,不需要有零散的小版本了。
标准不能用以前版本号命名了,改用年份命名。
ECMAScript 2015就成了“ECMAScript 6.0”的第一个版本。而“ECMAScript 6.0”本身应该是不存在的。
\
现在大部分浏览器都支持到ECMAScript 5.1了。
\
以上这些标准也可以简称ES5,ES6,ES2015。
现在我们理清楚了ES5,ES6和ES2015的关系。特别是ES6和ES2105的关系,这种序号上面的不连贯性,给人巨大的困惑。
\
二、TypeScript的概念
以上的这些概念跟TypeScript有什么关系呢?TypeScript是微软开发的,更适合大型工程开发。JavaScript不适合大型开发(细节就不讨论了)。TypeScript是JavaScript的超集,这好比C++跟C语言的关系。
\
但是,TypeScript不能被当前的浏览器直接支持,TypeScript要被编译成JavaScript才能被浏览器解释。
\
既然要被编译成JavaScript,那当然要知道编译成哪个版本的了。所以,编译TypeScript的时候要指定是ES5,ES2015甚至ES2017这些版本号。
\
个人总结:
写这篇文章是为了让自己记住JavaScript的这些概念,之前看了老是忘记,真得自己要写出来的时候,才会去认认真真仔细的去查找资料。这里面也结合了一些自己的认识,写出来不但是为了加深理解,也希望可以帮助到其他网友。如果有错误,请指点。
\
\
参考资料:
1.3 JavaScript的历史www.w3cschool.cn/nwfchn/f7u43ozt.html
1.3 JavaScript的历史www.w3cschool.cn/nwfchn/f7u43ozt.html
ES6 入门教程es6.ruanyifeng.com/#docs/intro
摘抄一段,这段解了我很多疑惑:
ES6 与 ECMAScript 2015 的关系
ECMAScript 2015(简称 ES2015)这个词,也是经常可以看到的。它与 ES6 是什么关系呢?
2011 年,ECMAScript 5.1 版发布后,就开始制定 6.0 版了。因此,ES6 这个词的原意,就是指 JavaScript 语言的下一个版本。
但是,因为这个版本引入的语法功能太多,而且制定过程当中,还有很多组织和个人不断提交新功能。事情很快就变得清楚了,不可能在一个版本里面包括所有将要引入的功能。常规的做法是先发布 6.0 版,过一段时间再发 6.1 版,然后是 6.2 版、6.3 版等等。
但是,标准的制定者不想这样做。他们想让标准的升级成为常规流程:任何人在任何时候,都可以向标准委员会提交新语法的提案,然后标准委员会每个月开一次会,评估这些提案是否可以接受,需要哪些改进。如果经过多次会议以后,一个提案足够成熟了,就可以正式进入标准了。这就是说,标准的版本升级成为了一个不断滚动的流程,每个月都会有变动。
标准委员会最终决定,标准在每年的 6 月份正式发布一次,作为当年的正式版本。接下来的时间,就在这个版本的基础上做改动,直到下一年的 6 月份,草案就自然变成了新一年的版本。这样一来,就不需要以前的版本号了,只要用年份标记就可以了。
ES6 的第一个版本,就这样在 2015 年 6 月发布了,正式名称就是《ECMAScript 2015 标准》(简称 ES2015)。2016 年 6 月,小幅修订的《ECMAScript 2016 标准》(简称 ES2016)如期发布,这个版本可以看作是 ES6.1 版,因为两者的差异非常小(只新增了数组实例的includes方法和指数运算符),基本上是同一个标准。根据计划,2017 年 6 月发布 ES2017 标准。
因此,ES6 既是一个历史名词,也是一个泛指,含义是 5.1 版以后的 JavaScript 的下一代标准,涵盖了 ES2015、ES2016、ES2017 等等,而 ES2015 则是正式名称,特指该年发布的正式版本的语言标准。本书中提到 ES6 的地方,一般是指 ES2015 标准,但有时也是泛指“下一代 JavaScript 语言”。