1.1 JavaScript的前世今生
1.1.1 JavaScript的起源
如果仔细观察一下如今在世界范围内广受欢迎的那些Web应用程序,例如Twitter、Facebook、YouTube、哔哩哔哩、新浪微博、淘宝等,就会发现它们能获得如此大的成功主要是因为它们首先在Web浏览器端实现了与桌面应用相似的人机交互体验,然后在移动端也实现了同样良好的用户体验。但众所周知的是,在过去相当长的一段时间里,Web站点都只是一组依靠超链接简单串联在一起的HTML文档。这些文档既无数据处理能力,也无法响应用户的操作,简单到甚至都不能被称为程序,更像一本被放在互联网上供人浏览的书。然而,随着Web站点的业务需求与日俱增(例如电子商务、线上交友、视频分享等),开发者越来越希望自己所创建的Web站点具有更强大的数据交互功能,并能即时响应用户的操作。于是,JavaScript应运而生。
当然,罗马不是一天建成的,JavaScript这门语言也不是生来就如此强大的,甚至它最初的设计目标只是想在Web浏览器中运行一些嵌入式脚本而已。JavaScript的历史开始于1995年,当时世界上非常成功的Web浏览器提供商——网景公司聘请了一个名叫布兰登·艾奇(Brendan Eich)的人,希望他研发一门能与Java语言搭配使用、语法也与其相似的浏览器端脚本语言。他没有辜负网景公司的重托,本着速战速决的态度,仅用了10天就完成了该语言的原型设计,并在Netscape Navigator 2.0的Beta版中发布了它,当时这门语言的名称还是LiveScript。同年12月,网景公司在Netscape Navigator 2.0 Beta 3版发布时又将它重新命名为JavaScript,相传这样做主要是想让这门新生的编程语言蹭一下Java的热度。他们当时可能也没有想到,这个名字反而在日后成了大众对该语言的诸多误解之一。事实上,Java和JavaScript之间并没有任何从属关系。
之后的事情大家都耳熟能详了。网景公司凭借着JavaScript在Web浏览器市场上大获成功,这最终引起了微软公司的注意。为了与之竞争,微软公司随后在Internet Explorer 3.0浏览器上提供了自家的JavaScript实现,即JScript。如果这能带来良性竞争倒也不失为一件好事,但让人非常遗憾的是,当时微软公司在自己的版本中加入了很多IE(Internet Explorer)浏览器的专属特性。这些举措让不少基于IE浏览器设计的Web页面无法在非IE浏览器中正常显示,结果就导致了它与网景公司之间的恶性竞争,最终引燃了一场非常惨烈且影响深远的浏览器大战(时间大约是从1996年到2001年)。站在今天回顾那段历史,我们会发现那场大战不只开启了开源运动的时代,也让JavaScript这门语言的标准化问题被提上了议程。
1.1.2 JavaScript的标准化
1996年11月,为了反制微软公司的恶性竞争,同时也为了使JavaScript语言的实现趋于标准化,网景公司正式向ECMA(European Computer Manufacturers Association,欧洲计算机制造商协会)提交语言标准。然后在次年的6月,ECMA就以当下的JavaScript语言实现为基础制定了ECMA-262标准规范。自此,JavaScript核心部分的实现也被称为ECMAScript。截至2019年5月,ECMA一共更新了9个版本的标准规范,如表1-1所示。
表1-1 ECMAScript的标准化历史
正是基于这样的现实,本书的内容主要以ES5或ES6为标准来展开。这样做既有助于读者理解JavaScript发展至今所形成的设计理念与编程思想,也有助于这门语言的初学者快速上手并实验本书中所呈现的示例,而不必因为相关运行环境对标准的兼容性而发愁。