谈及JavaScript版本时,可能与早几年浏览器大战时对于JavaScript的实现一样让人困惑。比如,可能会看到JavaScript 1.5, JavaScript 2.0, ECMAScript 3, JScript 5诸如此类的。
了解JavaScript版本的信息,看似毫无必要。但知己知彼百战不殆,了解JavaScript代码运行的环境所支持的版本,可以编写出更为高效的代码。《Effective JavaScript》第一条,Know which JavaScript you are using。
版本信息
在经过一番资料的检索后,我发现Wiki上ECMAScript词条下有一个JavaScript版本的对应图表很直观的说明各个版本称呼之间的关系(图表有缩减):
JavaScript | JScript | ECMAScript |
---|---|---|
1.0 (Netscape 2.0) | 1.0 IE 3.0 | |
1.3 (Netscape 4.06-4.7x) | 3.0 (IE 4.0) | Edition 1, Edition 2 |
1.5 (Netscape 6.0) | 5.5 (IE 5.5) | Edition 3 |
1.6 - 1.8 | Edition 3 + extras | |
JavaScript 2.0 | Harmony |
JavaScript最初由Netscape推出,在其Netscape Navigator上使用,并一直使用”JavaScript X.X”的版本,后Mozilla沿用这种版本信息。
JScript是Microsoft在Netscape推出JavaScript不久后,在自家产品Internet Explorer上推出的脚本语言。为了避免商标授权问题,将其称为JScript。
之后,为了保证统一性,便产生了ECMAScript。ECMAScript目前有1、2、3、5、6,五个版本。ECMAScript 6预计在2014年年底发布。
值得一提的是,ECMAScript 4并未发布,被打回重审,最后被ECMAScript 6取代。关于这点可以在Wiki ECMAScript词条下的ECMAScript 4和ECMAScript 6中看出端倪。
浏览器的实现情况
对于浏览器的支持情况,先看John Resig大神总结的博文。我将其中浏览器支持的情况整理成一个表格:
Product | Supports JavaScript |
---|---|
IE 6-7 | JScript5(= ECMAScript3, JavaScript 1.5) |
IE 8 | JScript6(= ECMAScript3, JavaScript 1.5) Bug fixes over JScript5 |
Firefox 1.0 | JavaScript 1.5(= ECMAScript3) |
Firefox 1.5 | JavaScript 1.6 (1.5 + Array Extras + E4X + misc.) |
Firefox 2.0 | JavaScript 1.7 (1.6 + Generator + Iterators + let + misc.) |
Firefox 3.0 | JavaScript 1.8 (1.7 + Generator Expressions + Expression Closures + misc.) |
Opera | A language that is equivalent to ECMAScript 3 + Getters and Setters + misc. |
Safari | A language that is equivalent to ECMAScript 3 + Getters and Setters + misc. |
浏览器更新日新月异,这份2008年的表格唯一能体现就是:ECMAScript 3在当前浏览器市场有广泛的支持。到这份日志写作时间,可以查到目前浏览器版本对JavaScript的支持情况为:
Product | Version tested | Test262 failed | Test suite version (date) |
---|---|---|---|
Google Chrome | 35.0.1916.114 m | 11/11578 | ES5.1 (2013-06-13) |
Mozilla Firefox | 29.0.1 | 48/11578 | ES5.1 (2013-06-13) |
Mozilla Firefox | 24.5.0 ESR | 75/11578 | ES5.1 (2013-06-13) |
Internet Explorer | 11.0.8 (11.0.9600.17107) | 7/11578 | ES5.1 (2013-06-13) |
Internet Explorer | 10.0.16 (10.0.9200.16899) | 8/11578 | ES5.1 (2013-06-13) |
Maxthon | 4.4.0.4000 | 11/11578 | ES5.1 (2013-06-13) |
Opera | 21.0.1432.67 | 11/11578 | ES5.1 (2013-06-13) |
Opera | 12.17 / 12.16 | 11/11578 | ES5.1 (2013-06-13) |
Safari | 7.0 (9537.71) | 8/11578 | ES5.1 (2013-06-13) |
可以看到新版的浏览器绝大多数已经支持ECMAScript 5。关于浏览器对于ECMAScript 5的支持情况,特别是细化到各项feature,可以参考这份文档(以及ECMAScript 6的支持情况)。
对于不支持ECMAScript 5的浏览器(比如说IE 6/7)可以考虑使用ES5 Shim库来解决。