likes
comments
collection
share

第一章 JavaScript前世今生

作者站长头像
站长
· 阅读数 6

本想着完全根据《JavaScript权威指南》的内容来写,但是仔细阅读后发现原书第一章确实没啥可写的,更多的是介绍JavaScript的代码示例,为了增强文章的趣味性,我觉得有必要向大家介绍一下JavaScript的前世今生,让大家了解下JavaScript的历史,本篇内容,我以《JavaScript高级程序设计》中的内容为参照,因为我觉得他确实介绍的比较详细,也是我看过的书籍中这部分讲的最好的一本,下面让我们来了解JavaScript的历史吧

JavaScript的由来

网景作为互联网引领技术革新的公司为了解决当时Web客户端为验证前端表单而需要大量与服务器通信的问题,想开发一个客户端的简单脚本语言来处理这些数据验证,在1995年,一名叫Brandan Eich的工程师,见祖师爷照片

第一章 JavaScript前世今生

为网景即将发布的Netscape Navigator2开发一个叫Mocha的脚本语言,这个语言就是JavaScript的前身,后来改名为LiveScript,很熟悉吧,在当时,他在服务端和客户端都在使用,而在服务端叫做LiveWire

可以看到,一开始JavaScript就并不是完全为前端设计的,而且服务端JavaScript一直存在多年,只不过由于单线程模型一直没有占有市场,自从基于事件驱动的异步架构的Node.js被创造出来后,一切发生了极大的改变,这同样在《深入浅出NodeJS》一书中有被提到。

为了赶上发布时间,网景公司与Sun公司(开发java的公司)结合为开发联盟,共同完成大队LiveScript的开发工作,而在当时,java这语言已经特别火,而为了推广产品,网景就把LiveScript改名为JavaScript,所以JavaScript和Java完全一点关系都没有,如果有关系那就是都是同一个妈养的。

由于JavaScript1.0发布后很成功,网景又在NetScape Navigator3中发布了JavaScript1.1版本,在当时Web的受欢迎程度达到了前所未有的新高,网景自此坐上了老大哥的位置,而同样作为互联网竞争者的微软坐不住了,在NetScape Navigator3发布不久,微软就发布了自家的IE3,其中嵌入了JScript(JScript是微软对IE浏览器定制的ECMAScript的实现,但在当时还没有ECMAScript),所以当时存在两个版本的JavaScript,一个是网景的JavaScript:NetScape Navigator,另一个是微软IE的JScript,由于存在两个版本的JavaScript,为了统一JavaScript的语法特性,JavaScript走上了标准化的征程。

ECMAScript由来

1997年,JavaScript1.1版本作为提案被提交到欧洲计算机制造商协会(ECMA)。第39技术委员会(TC39)承担了的标准化一门通用、跨平台、厂商中立的脚本语言的语法和含义的任务,TC39委员会是由网景、Sun、微软、Borland、Nombas和其他对这门语言感兴趣的公司的工程师组成,经过数月的打磨,最终打造出了ECMA-262,也就是大名鼎鼎的ECMAScript这个脚本语言标准(注意,这只是一个标准)。最新提案可见ECMAScript官网

1998年,国际标准化组织(ISO)和国际电工委员会(IEC)也将ECMAScript采纳为标准(ISO/IEC-16262),从此各家浏览器都以ECMAScript作为标准开发了自己JavaScript的实现,但是又各有不同(各个浏览器兼容性问题的原因,前端开发者痛苦的根源)。

JavaScript与ECMAScript区别

虽然JavaScript和ECMAScript基本上是同义词,但是还要注意,完整的JavaScript实现包含了ECMAScript和DOM、BOM

第一章 JavaScript前世今生

  • ECMAScript: JavaScript核心语法规范。
  • BOM:浏览器对象模型。
  • DOM:文档对象模型。

而ECAMAScript并不局限于Web浏览器,Web浏览器只是JavaScript实现存在的一个宿主环境,他为ECMAScript的基准实现和环境自身交互提供必要的扩展(DOM、BOM),使得我们能够用ECMAScript语法来提供特定环境的其他功能,同样,Node和Adobe Flush也是ECMAScript的宿主环境。所以我认为,严格意义上来说,NodeJS并不是使用的完整JavaScript,而是ECMAScript实现的特定版本。

ECMAScript版本以及迭代变化

ECMAScript第一版

其本质就是网景的JavaScript1.1,只不过删除了所有浏览器特定的代码,ECMAScript支持Unicode标准用来支持多种语言(后面章节会讲到)。而且对象与平台无关,在JavaScript1.1和JavaScript1.2中的Date对象就完全依赖于平台,所以JavaScript1.1和JavaScript1.2不符合ECMAScript标准。

ECMAScript第二版

第二版只是做了些编校工作,更符合ISO/IEC-16262要求,未带来任何新特性。所以通常不采用第二版来作为标准来判别符合性。

ECMAScript第三版

第一次真正对这个标准更新,对字符串处理,错误定义数值输出进行更新,另外增加了正则表达式,控制语句,异常处理的表达式并且为了更好的作为标准进行了少量修改,此时ECMAScript作为真正的编程语言的时代到来

ECMAScript第四版

一次彻底的修订,此时JavaScript已经在Web上收到了较多的成功回应,开发者修改ECMAScript来满足全球Web的日益增长的需求,T39再次被召集,开会决定这门语言的未来,最后他们定制的规范在第三版基础上基本上完全定义了一门新的语言,第四版更新包括强类型变量,新语句和数据结构真正的类和继承模式和带来了全新的操作数据的手段。

同时,TC39的一个子委员会也提出了另一个提案,叫“ECMAScript3.1”,只对这门语言由较少的改进,因为他们觉得第四版的提出对这门语言的改动太大了,他们才提出这个较小跳跃版的提案,并且实现较为简单,最终T39委员会支持了该提案,ECMA-262的第四版在正式发布前被废弃。

ECMAScript第五版

2009年12月3日,ECMAScript3.1成为了ECMA-262的第五版被正式发布,他理清了第三版存在的歧义,同时增加了原生解析和序列化JSON数据和JSON对象,为方便继承和高级属性的方法,已经增强了ECMAScript引擎解释和执行代码能力的严格模式。在2011年6月,该版本发布了一个维护性的修订版,只修订了原版中的错误,并没有增加任何新的语言特性。

ECMAScript第六版

简称ES6,大名鼎鼎的ES6在2015年的6月份诞生了,这个版本带来了此规范有史以来最重要的增强特性,ES6正式支持了类、模块、迭代器、生成器、箭头函数、期约、反射、代理和众多新的数据类型。

ECMAScript第七版

简称ES7,2016年6月发布,此次更新带来了少量的语法层面的增强,例如带来了Array.protoType.incluedes方法(还有其他方法在后面章节介绍)

ECMAScript第八版

2017年6月发布,增加了异步函数(async/await),SharedArrayBuffer(该对象似乎存在安全问题后来被禁用了)以及AtomicsAPI和一系列Object的方法,另外支持对象字面量最后的逗号

又是一个极小的细节,这个逗号还有个专门的学名叫 尾末逗号,在《现代JavaScript库开发原理、技术与实战》一书中有讲到

ECMAScript第九版

简称ES9,发布于2018年6月,修订了一步迭代、剩余和扩展属性、一组新的正则表达式以及Promise.finally()和模版字面量的修订

ECMAScript第十版

发布于2019年6月,增加了更多的数组功能,比如flat方法,flatMap方法等,另外定义了Symbol的description属性,并且固定了Array.protoType.sort的顺序,修订了JSON字符串兼容问题并定义了catch子句的可选绑定(这个作者暂时还不清楚,待我查查再来更新)。

什么叫符合ECMAScript规范

写了这么久,我们要衡量一个语言他是否符合ECMAScript规范要有哪些条件呢,他必须满足下面的条件:

  • 支持ECMA-262中描述的所有“类型、值。对象、属性、函数、以及程序语法语义”。
  • 支持Unicode字符标准。 此外,符合性实现还可以满足下列要求:
  • 增加ECMA-262中所未提及的额外的类型、值、对象、属性和函数。
  • 支持ECMA-262中没有定义的程序和正则表达式语法,即允许修改和扩展内置的正则表达式特性。

可以看出来ECMAScript给了语言开发者极大的权限和灵活度,所以其广受欢迎。

浏览器对ECMAScript的支持

1996年Netscape Navigator3发布时包含了JavaScript1.1,JavaScript1.1随后被提交给了ECMA作为对ECMA-262标准的建议,后来JavaScript爆红,网景声称非常乐意开发1.2版本,可是ECMA并没有接受他的建议。

Netscape Navigator3发布后微软的IE3发布了,包含了JScript1.0版本,他想提供JavaScript1.1相同功能,不过由于缺失很多文档,他并没有JavaScript1.1功能强大。

后来JScript3.0在IE4中更新,微软声称JScript是世界上第一门真正兼容ECMA标准的脚本语言,但是因为当时ECMA-262还没有制定完(微软这波属实是连蒙带猜了),JScript同样没有遵守ECMAScript的最终标准。

网景后来在Netscape Navigator4.06版本中将JavaScript升级到1.3,做到了与ECMA-262第一版的完全兼容。后来网景以Mozilla项目名义向公众发布其源码时,人民希望网景的Netscape Navigator5会包含JavaScript1.4,可是人们希望落空了,他完全重新设计了代码。后来JavaScript1.4只在NetscapeEnterprise Server中作为服务端语言发布了,没有进入浏览器。

2008年,IE、Firefox、Safari、Chrome、Opera全面兼容了ECMA-262的第三版,IE8率先兼容了第五版(IE这属实烂尾了),并在IE9中完整支持。下面附上主流浏览器对ECMAScript的兼容情况:

第一章 JavaScript前世今生

总结

本章讲述了JavaScript的历史,我们从历史上认识JavaScript才能让我们更好的了解他的来龙去脉,这一章主要从《JavaScript高级程序设计》中了解到了,想了解更详细的内容自行看原书,下一章我们回到《JavaScript权威指南》第二章,让我们开始真正踏入JavaScript的学习吧。

转载自:https://juejin.cn/post/7267114615661346855
评论
请登录