1.3.1 JavaScript 的标准化 上节提到,JavaScript 是由网景公司提出的。之后,微软开发了和JavaScript 相兼容的JScript 并将其应用于Internet Explorer 中。不过,人们通常将两者统称为JavaScript。 为了防止因两家公司独自开发而导致JavaScript 分裂以及其他一些问题,网景公司提出了名为EcmaInternational 的JavaScript 标准化组织。这一 标准语言的名称就是ECMAScript。由于将语言规则的制定权交给了中立的标准化组织,网景公司放弃了对JavaScript 的垄断地位,JavaScript 因此具备了标准化程序设计语言所必须的安定感。对于开发者来说,标准的程序设计语言不会随特定企业的想法而轻易改变,也更令人安心。这是因为如果一种语言由某一企业所控制,可能会发生开发终止或是需要收费使用的情况。 ECMAScript 的标准编号是ECMA-262,并在之后获得了ISO 的承认(ISO-16262)。通俗来讲,就是得到了ISO 的权威认证。根据ECMAScript 标准,网景公司的JavaScript 被重新定义为一种符合ECMAScript 标准的程序设计语言。微软的JScript 亦然。即使之后JavaScript 的开发主体由网景公司变为了Mozilla 基金会,这一定义也没有改变。 之后还出现了其他ECMAScript 的具体实现,不过现在都将它们统称为JavaScript 实现。严格来说,由网景公司开发、现由Mozilla 基金会继续发展的语言称为JavaScript,其他ECMAScript 标准的实现方式称为JavaScript 的兼容实现方式。不过这样区分的意义并不大,所以本书将这些统称为JavaScript 实现方式。目前,具代表性的JavaScript 实现方式一方面以标准为主,一方面也在独立发展。也就是说,它们在提供了ECMAScript 功能的基础上,继续提供其他便捷功能。事实上,JavaScript 的具体实现大部分都是ECMAScript的超集。因此,如果要保证可移植性,只要做到在代码中仅使用ECMAScript 标准所包含的功能即可。 1.3.2 被放弃的ECMAScript 第4 版 表1.1(JavaScript 简史)中并没有ECMAScript 第4 版,这是因为ECMAScript 第4 版没能符合要求而最终被放弃了。 ECMAScript 第3 版是在1999 年提出的。一方面可以说JavaScript 在10 年间保持了稳定不变,但另一方面也意味着它的标准止于10 年之前,已经停止了前进。一般来说,1999 以后的ECMAScript 第3 版以及JavaScript 1.5 版被作为默认标准,即使JavaScript 增加了新功能也被视为增强功能。官方的意见是为了与标准相兼容,不应该使用新功能。标准化有积极的一面,但同时又由于其发展过于缓慢,导致了JavaScript 的具体实现往往增加了很多独有功能,造成了代码可移植性降低的不良后果。 在大约10 年的时间里(1999 年至2008 年),ECMAScript 第4 版的制定工作一直在进行,原本计划向业已规范有序的标准中进一步加入大量增强功能。在第4 版中甚至有引入“类”的概念这样大胆的标准变更计划。然而,2008 年的标准化工作大会放弃了大幅度变更标准的计划,转为在第3 版的基础上进行渐进式改进。于是,在2009 年直接发布了和第3 版标准差异不大的第5 版。 由于ECMAScript 第5 版的保守,JavaScript 1.6 版中很多新增功能的处境也变得微妙起来。虽然其中也有一些功能仍然被ECMAScript 第5 版采用,但其大部分都没能被接受。因此,虽说只要遵循ECMAScript 标准依然可以随意使用,但JavaScript 1.6 版实际上成为了一种独立的JavaScript 增强版本。总之,如果要遵循标准或是保证可移植性的话,就不应该使用那些功能。