前端程序员需要知道的几个概念:ECMA5Script 、ECMAScript6、TypeScript

rjlf3027 8年前
   <p style="text-align: center;"><img src="https://simg.open-open.com/show/300f9640d83e2523c32a9713ca1df094.jpg"></p>    <h3><strong>什么是ECMAScript、什么又是ECMA?</strong></h3>    <p>Ecma国际(Ecma International)是一家国际性会员制度的信息和电信标准组织。1994年之前,名为欧洲计算机制造商协会(European Computer Manufacturers Association)。因为计算机的国际化,组织的标准牵涉到很多其他国家,因此组织决定改名表明其国际性。现名称已不属于首字母缩略字。</p>    <p><strong>ECMAScript</strong>是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)通过ECMA-262标准化的脚本程序设计语言。这种语言在万维网上应用广泛,它往往被称为JavaScript或JScript,但实际上后两者是ECMA-262标准的实现和扩展。</p>    <h3><strong>ECMAScript和JavaScript到底是什么关系?</strong></h3>    <p>很多初学者会感到困惑,简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是 <em>ECMAScript</em> 的实现。</p>    <h3><strong>什么是ECMAScript5,什么是ECMAScript6呢?</strong></h3>    <p>有人总认为ECMAScript5就是所谓的ECMAScript2015(是因为都有个5么?),其实是不对了,早在2009年12月份ECMA公司就发布了ECMAScript5。</p>    <p>而我们所说的ECMAScript6是2015年6月份发布的,是JavaScript语言的下一代标准,官方称ECMAScript2015,Mozilla公司将在这个标准的基础上,推出JavaScript 2.0。</p>    <p>ECMAScript6是继ECMAScript5之后的一次主要改进,语言规范由ES5.1时代的245页扩充至600页。 ECMAScript6的目标是使得JavaScript语言可以用来编写大型的复杂的应用程序,成为企业级开发语言。ECMAScript6增添了许多 必要的特性,例如:模块和类,以及一些实用特性,例如Maps、Sets、Promises、生成器(Generators)等。尽管 ECMAScript6做了大量的更新,但是它依旧完全向后兼容以前的版本,标准化委员会决定避免由不兼容版本语言导致的“web体验破碎”。结果是,所 有老代码都可以正常运行,整个过渡也显得更为平滑,但随之而来的问题是,开发者们抱怨了多年的老问题依然存在。</p>    <p>令人不爽的是目前没有一款完全支持ES6的JavaScript代理(无论是浏览器环境还是服务器环境),所以我们真正使用ECMAScript6开发者需要将ECMAScript6代码转译为ECMAScript5代码。</p>    <h3><strong>什么是TypeScript?</strong></h3>    <p>TypeScript是一种由微软开发的自由和开源的编程语言。注意:官方给出的解释TypeScript是一种编程语言,请大家记住了。</p>    <p>它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。TypeScript扩展了JavaScript的 语法,所以任何现有的JavaScript程序可以不加改变的在TypeScript下工作。TypeScript是为大型应用之开发而设计,而编译时它 产生 JavaScript 以确保兼容性。它与JavaScript相比进步的地方包括:加入注释,让编译器理解所支持的对象和函数,编译器会移除注释,不会增加开销。 而JavaScript只是一个脚本语言,并非设计用于开发大型 Web 应用, <em>JavaScript</em> 没有提供类和模块的概念,而TypeScript扩展实现了这些特性。</p>    <p><em>TypeScript</em> 最大的特点就是类型化,因此才叫做TypeScript。比起弱类型的JavaScript,类型化的TypeScript显得更加容易维护。</p>    <p>这里少插一句,有人认为TypeScript有一个优点就是要经过TSC编译,他在编译期能够知道一些错误,这个难道算优点吗?我 竟无言以对,不管是使用TSC进行监听编译,还是手动触发命令编译,还是通过写Gulp脚本编译,其过程让人难以忍受(因为TSC和Ionic2提供的 Gulp脚本我都使用过),比如说你正在写一个Class,写完之后想马上看到效果,这个时候你发现你的CLI正在拼命地编译,好的时候会在3秒左右你能 看到页面效果,设想一下,如果工程更巨大,你觉得编译工程需要多久呢?</p>    <p>TypeScript要经过TSC编译并不是它的优势,如果让微软选择它宁愿所有的宿主环境能够直接运行它,编译期间能够检查的错误无非是语法与依赖之类 的错误,不代表真正运行的时候没有错误,我曾很多次在编译器无错误,在运行期间出现很多错误,这取决于你使用框架的机制和你业务逻辑的实现,如同你使用 servlet写服务一样,编译期间没错就一定代表运行时不会出异常么?两者其实没有可比性,其实要经过TSC编译恰恰是TypeSciprt的一个缺 点,在开发过程中反而给我们带来很多不便。</p>    <h3><strong>TypeScript和ECMAScript6的区别?</strong></h3>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/590dc99eb0a96cc32d3161e2516b6679.jpg"></p>    <p style="text-align: center;">程序员高效开发利器:编程水杯</p>    <p>首先我们都期望现在的宿主环境都能够直接运行ECMAScript6,我还没见过哪个人说期望浏览器直接能够运行TypeScript,因为毕竟 EXMAScript6是一个标准,而Typescript实现了ECMAScript6的特性,并且在此之上有进行扩展,也就是说Typescript 有些特性并不是ECMAScript6的规范,哪说两个是一个东西其实是不对的,只能说明他们有些写法是相同的不代表是一个东西。正因为目前而言我们现在 的宿主环境都无法直接运行TypeScript和ECMAScript6,所以两者都需要进行编译器编译,并且目标语言都是Javascript,在我们 编写Typescript的时候是可以使用javascript的,在我看来编译器大不了不编译那段javascript的代码对吧!所以说我们在写 Typescript的时候其实是可以写ECMAScript6的,原因非常简单你会使用TSC进行编译,那么你设想一下你写Typescript却是用 ECMA6的标准去编译,行么?现在你还认为两者是一个东西么?</p>    <p>如果你还不理解我就只能上代码了,比如我们现在定义一个类:</p>    <p>使用ECMAScript6:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/059bf8f8742fb80e973aee71653c2c11.png"></p>    <p>那么我们使用TypeScript写呢:</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/c6bc968d5f73a2dd6edd29bfd0c54d19.png"></p>    <p>甚至我们为了方便,也可以写成</p>    <p style="text-align: center;"><img src="https://simg.open-open.com/show/070857a8b61f710bd0b9310bde6311bf.png"></p>    <p> </p>    <p>来自:http://www.techug.com/ecma5script-ecmascript6-typescript</p>    <p> </p>