很多前端都对ECMAScript,JavaScript,TypeScript这几个词相当熟悉,可以说是我们工作的核心技术,但如果具体问起来这三者到底是什么关系,有什么区别,恐怕很难对其进行准确的描述,所以我决定和大家一起彻底搞明白他们的关系与区别。
一、ECMAScript
ECMAScript,即ECMA-262定义的语言,并不局限于Web浏览器。事实上,这门语言没有输入和输出之类的方法。
ECMA-262将这门语言作为一个基准来定义,以便在它之上再构建更稳健的脚本语言。如果不涉及浏览器的话,ECMA-262在基本的层面,它描述这门语言的如下部分:
- 语法
- 类型
- 语句
- 关键字
- 保留字
- 操作符
- 全局对象
ECMAScript只是对实现这个规范描述的所有方面的一门语言的称呼,其实也可以理解为一个语言标准,JavaScript实现了ECMAScript,而Adobe ActionScript同样也实现了ECMAScript,只要你想,也可以构建一门脚本语言如XXScript来实现ECMAScript
二、JavaScript
虽然JavaScript和ECMAScript在平时使用时基本上是同义词,但JavaScript远远不限于ECMA-262所定义的哪些部分。完整的JavaScript实现包含以下几个部分:
核心(ECMAScript)
文档对象模型(DOM)
浏览器对象模型(BOM)
可以理解为ECMAScript是形成JavaScript语言基础的脚本语言,再加上DOM和BOM构成了完整的JavaScript实现
三、TypeScript
TypeScript是JavaScript的超集,添加了可选的静态类型系统、很多尚未正式发布的ECMAScript新特性(如装饰器)等,最终会被编译为JavaScript代码。
小结
如果用三句话概括他们的关系,那就是,ECMAScript是标准语言,JavaScript是ECMAScript的实现,TypeScript是JavaScript的超集。
ES: ECMAScript (语法); JS: JavaScript (应用); TS: TypeScript (类型扩展)
ECMAScript 指的是JavaScript语言的标准语法和基础环境内置对象。
JavaScript 一般指的是浏览器环境运行的 ECMAScript 语法接口的编程语言,另外还包含 BOM (浏览器的一些接口,获取浏览器信息、版本、屏幕、操作系统、url处理 等), DOM(HTML文档对象接口,就是所有你处理页面元素、样式等等都属于DOM)。
TypeScript 主要针对编程语言语法扩展来的,所以我们不拿它直接比较JS(应用型说法),TS就是 ES的语法基础上扩展了type产生的东西,除去类型定义的 TS 就是 ES,TS比ES仅仅多了type。这种类型扩展是由于JavaScript应用范围越来越广、复杂度越来越高,为了提高可维护性产生的有意义的能力。