本文梳理了JavaScript从1995年诞生至今的版本演变历程,涵盖Netscape、微软JScript及ECMAScript标准的制定过程。详细解析了核心、DOM与BOM三大组成部分,并整理了各主流浏览器对JavaScript版本的实现差异,帮助开发者理解版本迷局与标准统一的重要性。
JavaScript发展历程概述
自1995年诞生以来,JavaScript已走过16个年头。如今,全球无数网页依赖它执行关键任务,使其在Tiobe编程语言排行榜中位列第8,紧随C#之后。JavaScript已从早期的装饰性脚本语言转变为主流编程语言,用于开发规模更大、逻辑更复杂的程序。这要求Web开发人员深入理解JavaScript,包括其过去、现状与未来。
JavaScript历史简述
早期脚本语言与Netscape的诞生
约在1992年,Nombas公司开始开发一种名为C减减(C-minus-minus,简称Cmm)的嵌入式脚本语言。该语言捆绑在共享软件CEnvi中。当Netscape Navigator崭露头角时,Nombas开发了可嵌入网页的CEnvi版本。这些早期试验被称为Espresso Page(浓咖啡般的页面),代表了首个在万维网上使用的客户端脚本语言。Nombas当时并未预料到其理念将成为互联网的重要基石。
随着网上冲浪日益流行,开发客户端脚本的需求逐渐增加。当时在Netscape工作的Brendan Eich着手为即将于1995年发布的Netscape Navigator 2.0开发一种名为LiveScript的脚本语言,初衷是同时在浏览器和服务器端使用。Netscape与Sun公司联手及时完成了LiveScript的实现。就在Netscape Navigator 2.0即将正式发布前,Netscape将其更名为JavaScript,旨在利用Java这一互联网热门词汇。Netscape的赌注最终获得回报,JavaScript从此成为互联网的必备组件。
ECMAScript标准
微软JScript与标准化进程
由于JavaScript 1.0取得巨大成功,Netscape在Netscape Navigator 3.0中发布了1.1版。恰逢此时,微软决定进军浏览器领域,发布了IE 3.0并搭载了一个JavaScript的克隆版,名为JScript(如此命名是为了避免与Netscape潜在的许可纠纷)。微软进入Web浏览器领域的这一步骤虽然令其声名狼藉,但也成为JavaScript语言发展过程中的重要一环。
微软进入后,市场上同时存在三种不同的JavaScript版本:Netscape Navigator 3.0中的JavaScript、IE中的JScript以及CEnvi中的ScriptEase。与C等其他编程语言不同,JavaScript缺乏统一语法或特性的标准,这三种不同版本恰好凸显了这一问题。随着业界担忧加剧,语言标准化已势在必行。1997年,JavaScript 1.1作为草案提交给欧洲计算机制造商协会(ECMA)。由来自Netscape、Sun、微软、Borland及其他对脚本编程感兴趣公司的程序员组成的TC39团队锤炼出了ECMA-262标准,该标准定义了名为ECMAScript的全新脚本语言。从此,Web浏览器开始努力(尽管成功与失败程度不一)将ECMAScript作为JavaScript实现的基础。
JavaScript的三大组成部分
尽管ECMAScript是一项重要标准,但它并非JavaScript的唯一组成部分,当然也不是唯一被标准化的部分。实际上,一个完整的JavaScript实现由以下三个不同部分组成:
核心(ECMAScript)——JavaScript的核心ECMAScript描述了该语言的语法和基本对象
文档对象模型(DOM)——DOM描述了处理网页内容的方法和接口
浏览器对象模型(BOM)——BOM描述了与浏览器进行交互的方法和接口
JavaScript版本历史
JavaScript版本与浏览器实现对照
由于历史原因及技术不断发展,JavaScript版本众多,各浏览器的实现情况也各不相同。笔者根据各方面信息整理了JavaScript的各个版本及对应浏览器的实现情况,这也是本文的主要目的,欢迎大家提供意见,共同完善。
| 版本 | 发布日期 | 基于 | Netscape Navigator | Mozilla Firefox | Internet Explorer | Opera | Safari | Chrome |
| 1.0 | 1996年3月 | 2.0 | 3.0 (JScript 1.0)(1996年8月) | |||||
| 1.1 | 1996年8月 | 3.0 | 3.0 (JScript 2.0)(1997年1月) |
|||||
| 1.2 | 1997年6月 | 4.0-4.05 | ||||||
| 1.3 | 1998年10月 | ECMA-262 第一版 (1997年6月发布)/ ECMA-262 第二版 (1998年6月发布) | 4.06-4.7x | 4.0 (JScript 3.0)(1997年10月) | ||||
| 1.4 | Netscape Server Only |
JScript 4.0 (Visual Studio 6, no IE release) 5.0 (JScript 5.0)(1999年3月) |
||||||
| 1.5 | 2000年11月 | ECMA-262 第三版 (1999年12月发布) | 6.0 | 1.0 |
5.5 (JScript 5.5)(2000年7月) 6 (JScript 5.6)(2001年10月) 7 (JScript 5.7)(2006年10月) 8 (JScript 5.8)(2009年3月) |
|||
| 1.6 | 2005年11月 | 1.5 + Array extras + Array and String generics + E4X | 1.5 | 3.0, 3.1 | ||||
| 1.7 | 2006年10月 | 1.6 + Pythonic generators + Iterators + let | 2.0 | 3.2, 4.0 | 1.0 | |||
| 1.8 | 2008年6月 | 1.7 + Generator expressions + Expression closures | 3.0 | |||||
| 1.8.1 | 2009年6月 |
1.8 + Native JSON support + Minor Updates | 3.5 | |||||
| 1.8.5 | 2010年7月 |
1.8.1 + ECMAScript 5 Compliance | 4 | 9 |
||||
| 2.0 | 制定中 |
ECMAScript Harmony |
特殊版本与技术说明
特别说明:
1. 当Netscape将源代码作为Mozilla项目公布时,原计划JavaScript 1.4将嵌入到Netscape Navigator 5.0中。然而,一个冒进的决定——完全从头重新设计Netscape代码,破坏了这项工作。JavaScript 1.4仅作为Netscape Enterprise Server的服务器端脚本语言发布,此后未被放入浏览器中。
2. E4X(ECMAScript for XML)是一种在ECMAScript(见ECMA-262,包括ActionScript、JavaScript等语言实现)标准基础上加入动态XML支持的程序语言扩展。E4X旨在作为DOM接口之外的另一种选择。它使程序员能在ECMAScript脚本中通过更简洁的语法访问XML文档。同时,它也为实现脚本中XML可视化提供了一种新方法。
3. 从IE 5.5版本发布开始,微软未再更新其基于浏览器的JavaScript实现策略。但在.NET Framework中包含了JScript.NET作为ECMAScript 4的实现,其中添加了一些特定于微软的功能。它不能作为客户端脚本语言在IE中使用,只能用于ASP.NET中作为服务器端语言或独立应用程序。与其他JavaScript版本不同,JScript.NET是编译型语言,可生成独立的可执行文件。
4. ECMAScript Harmony其实是包含JavaScript 2.0在内的ECMAScript第四版的一个临时新命名(未来可能是ECMAScript第六版?),ECMAScript第五版则是独立开发的ECMAScript 3.1语言的后期命名。
5. 如今,所有主流Web浏览器都遵守ECMA-262第三版,即实现的是JavaScript 1.5版。JavaScript 1.6-1.9只是ECMAScript(JavaScript on Gecko)升级至JavaScript 2.0的临时代号。
JavaScript版本检测方法
检测JavaScript版本
点击测试按钮可以测试当前浏览器支持的JavaScript版本。在IE8中测试,提示支持的版本是1.3,这令人感到奇怪。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <title>Determine JavaScript Version</title> <style type="text/css"> html, body { margin: 0; padding: 0} </style> </head> <body> <div> </div> </body> </html> [Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
参考内容:
1. JavaScript高级程序设计 2. http://en.wikipedia.org/wiki/Javascript#History 3. http://en.wikipedia.org/wiki/ECMAScript#Version_correspondence 4. http://ejohn.org/blog/versions-of-javascript/ 5. https://developer.mozilla.org/en/JavaScript/Guide/JavaScript_Overview 作者:梦想 出处:http://www.cnblogs.com/lhb25