Talk is cheap,Show me your code.
JavaScript的历史
1995年,Netscape公司的Brenda Eich为Netscape Navigator 2开始着手开发一种名为LiveScript的脚本语言(同时在浏览器和服务器中使用,在服务器上的名字叫LiveWire)。为按期完成开发,Netscape与Sun公司建立了开发联盟。
1996年,在Netscape Navigator 2发布前夕,Netscape为蹭热度临时改名LiveScript为JavaScript。因为JavaScript 1.0获得巨大成功,Netscape在Netscape Navigator3中发布了JavaScript 1.1。微软在IE3中加入名为JScript的脚本语言(这样命名是为避开与Netscape有关的授权问题,此时的JScript基于Netscape JavaScript 1.0开发),此时JavaScript有了两个不同版本。1997年,以JavaScript 1.1为蓝本定义JavaScript标准的建议提交给了ECMA(欧洲计算机制造商协会)。ECMA指定39号技术委员会(TC39,由来自Netscape、Sun、微软、Borland等公司的程序员组成)负责标准化一种通用、跨平台、供应商中立的脚本语言的语法和语义。 TC39经数月完成了ECMA-262——定义一种名为ECMAScript的新脚本语言的标准。1998年,ISO/IEC(国际标准化组织和国际电工委员会)也采用ECMAScript作为标准(即ISO/IEC-16262)。自此,ECMAScript成为浏览器开发商各自实现JavaScript的基础。JavaScript的实现
一个完整的JavaScript实现由核心(ECMAScript)、文档对象模型(DOM)和浏览器对象模型(BOM)组成。
ECMAScript
由ECMA-262定义的ECMAScript不包含输入输出定义,ECMA-262定义的只是ECMAScript的基础,在此基础之上可以构建更完善的脚本语言。
ECMAScript的宿主环境不仅有Web浏览器,还包括Node(服务端JavaScript平台)和Adobe Flash。宿主环境不仅提供基本的ECMAScript实现,同时也会提供该语言的扩展,以便改语言与环境之间对接交互。这些扩展利用ECMAScript的核心类型和语法提供更多更具体的功能,以便实现针对环境的操作。ECMA规定内容
ECMAScript就是对实现该标准规定的各个方面内容的语言的描述,大致上它规定了这门语言的下列组成部分:
- 语法
- 类型
- 语句
- 关键字
- 保留字
- 操作符
- 对象
ECMAScript版本
- ECMA-262第1版在本质与Netscape的JavaScript 1.1相同,只是删除了所有针对浏览器的代码并作了小改动(支持Unicode从而支持多语言开发,对象变为平台无关的)。
- ECMA-262第2版更新是为了与ISO/IEC-16262保持严格一致,没有任何新增、修改和删除处理。
- ECMA-262第3版才是第一次真正的修改,修改了字符串处理、错误定义和数值输出,新增对正则、新控制语句、try-catch的支持及其他小的修改。第3版标志ECMAScript成为一门真正的编程语言。
- ECMA-262第4版进行了一次全面检核修订,新标准不仅包含强类型变量、新语句和新数据结构、真正的类和经典继承,还定义了数据交互的新方式。由于跨越过大,ECMA-262第4版在发布前夕被放弃。
- ECMA-262第5版源自第3版,力求澄清第3版中已知歧义并增添了新的功能(包括原生JSON对象、继承的方法和高级属性定义),还包含一种严格模式,对ECMAScript引擎解释和执行代码进行了补充说明。ECMA-262第5版本来是ECMAScript 3.1,是因为考虑到第4版相对第3版跨越太大而另外设计的较少改进的版本。
ECMAScript兼容
要想成为ECMAScript的实现,则该实现必须做到:
- 支持ECMA-262描述的所有类型、值、对象、属性、函数以及程序语法和语义
- 支持Unicode字符标准
兼容的实现还可以进行下列扩展:
- 添加ECMA-262没有描述的类型、值、对象、属性、函数,主要指该标准中没有规定的新对象和对象的新属性
- 支持ECMA-262没有定义的程序和正则表达式语法
浏览器对ECMAScript的支持
浏览器 | ECMAScript兼容性 |
---|---|
Netscape Navigator 2 | - |
Netscape Navigator 3 | - |
Netscape Navigator 4~4.05 | - |
Netscape Navigator 4.06~4.79 | 第1版 |
Netscape 6+(Mozilla 0.6.0+) | 第3版 |
IE 3 | - |
IE 4 | - |
IE 5.5~7 | 第3版 |
IE 8 | 第5版(不完全兼容) |
IE 9+ | 第5版 |
Opera 6~7.1 | 第2版 |
Opera 7.2+ | 第3版 |
Safari 1~2.0.x | 第3版(不完全兼容) |
Safari 3.x | 第3版 |
Safari 4.x~5.x | 第5版(不完全兼容) |
Chrome 1+ | 第3版 |
Firefox 1~2 | 第3版 |
Firefox 3.0.x | 第3版 |
Firefox 3.5~3.6 | 第5版(不完全兼容) |
Firefox 4.0+ | 第5版 |
文档对象模型DOM
DOM(Document Object Model)是针对XML但经过扩展用于HTML的API(应用程序编程接口)。
DOM把整个页面映射为一个多层节点结构,HTML或XML页面中的每个组成部分都是某种类型的节点,节点包含着各种类型的数据。借助DOM提供的API,开发人员可以轻松删除、添加、替换或修改任何节点。因为IE4和Netscape Navigator 4分别支持不同形式的DHTML(Dynamic HTML),这增加了开发人员使代码兼容不同浏览器的负担,因此负责制定Web通信协议的W3C(万维网联盟)制定了DOM规范,DOM Level 1成为W3C的推荐标准。DOM级别
- DOM Level 1由DOM Core(规定如何映射基于XML的文档结构)和DOM HTML(在核心上添加了针对HTML的对象和方法)组成。
- DOM Level 2在原来的基础上扩充了鼠标和用户界面事件、范围、遍历等细分模块,而且通过对象接口增加了对CSS的支持。
- DOM Level 3进一步扩展了DOM,引入了以统一方式加载保存文档的方法,新增了验证文档的方法,对DOM核心进行了扩展,开始支持XML 1.0规范。
- DOM Level 0是不存在的,它只是一个参照点,即IE4和Netscape Navigator 4最初支持的DHTML。
其他DOM标准
下面列出的语言都是基于XML的,每种语言的DOM标准都添加了与特定语言相关的新方法和新接口:
- SVG(可伸缩矢量图)1.0
- MathML(数学标记语言)1.0
- SMIL(同步多媒体集成语言)
XUL(XML用户界面语言)也开发了自己的DOM实现,但是没有成为W3C的推荐标准。
Web浏览器对DOM的支持
浏览器 | DOM兼容性 |
---|---|
Netscape Navigator 1.x~4.x | - |
Netscape 6+(Mozilla 0.6.0+) | 1级、2级(几乎全部)、3级(部分) |
IE 2~4.x | - |
IE 5 | 1级(最小限度) |
IE 5.5~8 | 1级(几乎全部) |
IE 9~9.9 | 1级、2级、3级 |
Opera 1~6 | - |
Opera 7~8.x | 1级(几乎全部)、2级(部分) |
Opera 9~9.9 | 1级、2级(几乎全部)、3级(部分) |
Opera 10+ | 1级、2级、3级(部分) |
Safari 1.0.x | 1级 |
Safari 2+ | 1级、2级(部分) |
Chrome 1+ | 1级、2级(部分) |
Firefox 1+ | 1级、2级(几乎全部)、3级(部分) |
浏览器对象模型BOM
BOM只处理浏览器窗口和框架,但是人们习惯把所有针对浏览器的JavaScript扩展算作BOM的一部分。开发人员使用BOM可以控制浏览器显示的页面以外的部分。
BOM作为JavaScript实现的一部分却没有相关的标准,因此每个浏览器都会有各自的实现,这既是BOM与众不同的地方,也是它经常导致问题的地方。直到HTML5把很多BOM功能写入正式规范,这个问题才得到解决。JavaScript版本
浏览器 | JavaScript版本 |
---|---|
Netscape Navigator 2 | 1.0 |
Netscape Navigator 3 | 1.1 |
Netscape Navigator 4 | 1.2 |
Netscape Navigator 4.06- | 1.3 |
Netscape 6+(Mozilla 0.6.0+) | 1.5 |
Firefox 1 | 1.5 |
Firefox 1.5 | 1.6 |
Firefox 2 | 1.7 |
Firefox 3 | 1.8 |
Firefox 3.5 | 1.8.1 |
Firefox 3.6 | 1.8.2 |
只有Netscape/Mozilla浏览器才遵循这种编号模式,大多数浏览器对JavaScript的支持情况都以ECMAScript兼容性和对DOM的支持情况为准。