1.1 发展历史
JavaScript的发展并不是一帆风顺的,有着相当复杂的历史,这里简单概括一下JavaScript是如何最终定型的,以及与它相关的ECMAScript组织和规范是如何演进的。
1994年网景(Netscape)公司发布了Netscape Navigator浏览器,但是当时它只能用于访问静态的网站,而不能给网站添加交互,于是在1995年公司决定给浏览器加上处理用户交互的动态功能。当时网景公司并没有立即决定开发一门脚本语言,而是想在市面已有的编程语言中挑选出来一门嵌入浏览器,于是雇用了布兰登·艾奇(Brendan Eich)研究在Netscape Navigator浏览器中嵌入Scheme语言。
但是同年Sun Microsystems,Inc.(太阳计算机系统)公司正在为即将发布的Java语言造势,网景公司与Sun公司便达成了协议,让Java可以运行在Netscape Navigator浏览器中(Java Applet小程序)。后来网景公司认为Java语言的入门门槛比较高,不太适合作为浏览器的脚本语言,应当自己开发一门新的编程语言,因此安排布兰登·艾奇完成此项任务。
因为当时要赶着Navigator浏览器2.0 Beta版的上线计划,因此布兰登·艾奇仅花了10天时间就完成了新语言的开发,并命名为Mocha,包含在Navigator 2.0中,后来又被重命名为LiveScript,再后来(1995年12月4日)LiveScript正式更名为JavaScript。
JavaScript的名字之所以带Java,也是想借助当时Java语言的热点进行推广,同时也想保留Java语言的易用性,不过JavaScript除了语法借鉴了Java外,其实现方式和编程模型与Java完全不同:Java是基于类(Class)的,而JavaScript则是基于原型(Prototype)。
1995同年,微软发布了IE浏览器,开始了与网景公司的竞争,但IE并没有采用网景公司的JavaScript语言,而是自己对网景公司浏览器的运行时进行反编译,开发了JScript语言,这样就导致了开发者无法使用一套代码在两个浏览器中保持一致的行为和效果,这也是浏览器兼容性问题的开端。
随着两家浏览器的竞争,JavaScript和JScript的热度也越来越高,网景公司早在1995年就意识到每个浏览器都应该遵循同样的语言规范,当时计划交给W3C和IETF组织制订开放互联网脚本语言规范,但是由于这两个组织都不是专门为编程语言制订规范的,所以这个计划也没落实。担心微软发展壮大后会领导JScript规范的制订,在1996年末,网景公司把JavaScript语言交给了ECMA组织来制订规范,一个专门为信息和通信系统进行标准化的组织,并申请加入作为协会会员(Associate Member),同时微软也申请加入了ECMA普通会员(Ordinary Member),这时ECMA成立了专门为JavaScript制订规范的TC39技术委员会。
ECMA在当时是European Computer Manufacturers Association(欧洲计算机制造商协会)的首字母缩写,但现今ECMA已经成为一个专属名词作为该组织的正式名称,即Ecma International(Ecma国际),所以一般在提及该组织名称的时候,只把E进行大写,而ECMAScript则因为历史原因保留了ECMA这种缩写形式。
1997年,ECMA组织发布了第一版规范并把JavaScript正式命名为ECMAScript,把规范命名为ECMA-262,之后每一年都发布一版新的规范,直到1999年发布了ECMAScript第3版。
当2000年在制订第4版规范时,微软的IE浏览器已经占据了市场95%的份额,并且微软在发力自家的.NET平台,在业界影响力越来越大,而在参与ECMAScript 4规范的制定时,微软想重点给JavaScript加上静态的类型信息(这也是为什么微软编写TypeScript的原因之一),其他的TC39成员又不想让JavaScript成为像Java或C#之类的语言,因此各方对于规范的制订产生了严重的分歧,最后该版本被弃置了。
2005年杰西·詹姆斯·加勒特(Jesse James Garrett,一名用户体验设计师)发布了Ajax白皮书,使JavaScript异步操作成为现实,在不妨碍网站交互的前提下,能够在后台与服务器交换数据。Ajax的出现也催生了一批JavaScript库,例如曾经非常火爆的jQuery。后又随着谷歌在2008年推出了基于V8引擎的Chrome浏览器,这些浏览器厂商又开始商议推动ECMAScript规范的制订,于是在2009年,也就是大约10年的时间,ECMAScript规范第5版发布,此时的JavaScript开始逐渐变得成熟。与此同时,ECMA组织与浏览器厂商认为应重点推动JavaScript语言能够在不同的环境下运行,在2015年,ECMAScript 6发布,大量的语法和功能特性使JavaScript成为通用的编程语言。
在ES6之后的版本中,ECMAScript规范开始使用年份作为标记,因此ECMAScript 6也被称为ECMAScript 2015或简称为ES2015,这时就有了两种规范名字,这两种名字经常互换使用,并且时常有人把ES6及以后的特性都统一叫作ES6新特性。
随后从2016年开始,ECMAScript每年会发布一版新的规范,但是新特性不像由5到6那么多了,也标志着JavaScript进入了成熟期。截止到本书编写时,最新的ECMAScript规范为2021。
现今的JavaScript由于各种框架的支持,例如React、Vue、Angular、ReactNative、Electron等,已经可以开发多端跨平台的应用了,另外也有Express.js、Koa.js、Egg.js、Nest.js等基于Node.js的框架开发基于服务器的应用程序。