Skip to main content

什么是JavaScript

1.2 JavaScript实现

ECMAScript(发音 ek-ma-script)是JS的语言标准, 但是浏览器环境中完整的JS实现包含以下几个部分:

  • 核心(ECMAScript)
  • 文档对象模型(DOM) 提供与网页内容交互的方法和接口
  • 浏览器对象模型(BOM) 提供与浏览器交互的方法和接口

1.2.1 ECMAScript 版本

更详细版本迭代, 可以参考《JavaScript 二十年》

ECMA-262的第5版 (又称 ES5, ESMAScript 3.1)于2009年12月3日发布, 包含以下新功能:

  • JSON对象
  • 方便继承和高级属性定义
  • 严格模式

ECMA-262第6版 (又称 ES6, ES2015, ES Harmony) 于2015年6月发布, 包含以下功能:

  • 模块
  • 迭代器
  • 生成器
  • 箭头函数
  • Promise
  • 反射
  • 代理
  • 新的数据类型

ECMA-262第7版 (又称 ES7, ES2016), 于2016年6月发布. 这次修订只包含少量语法层面的增强, 如Array.prototype.includes和指数操作符.

ECMA-262第8版 (又称 ES8, ES2017) 完成于2017年6月, 这一版主要增加如下:

  • 异步函数(async/await)
  • SharedArrayBuffer
  • Atomics API
  • Object.values()
  • Object.entries()
  • Object.getOwnPropertyDescriptors()
  • 字符串填充方法
  • 明确支持对象字面量最后的逗号

ECMA-262第9版 (又称为ES9、ES2018,发布于2018年6月。这次修订包括异步迭代、剩余和扩展属性、一组新的正则表达式特性、Promise finally(),以及模板字面量修订。

ECMA-262第10版 (又称为ES10, ES2019) 发布于2019年6月, 这次修订新增如下:

  • Array.prototype.flat()/flatMap()
  • String.prototype.trimStart()/trimEnd()
  • Object.fromEntries()
  • Symbol.prototype.description属性
  • 明确定义了Function.prototype.toString()的返回值
  • 固定Array.prototype.sort()顺序

另外,这次修订解决了与JSON字符串兼容的问题,并定义了catch子句的可选绑定。

下表列出了主要的浏览器版本对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版
IE3
IE4
IE5第1版
IE5.5~8第3版
IE9第5版(部分)
IE10~11第5版
Edge 12+第6版
Opera 6~7.1第2版
Opera 7.2+第3版
Opera 15~28第5版
Opera 29~35第6版(部分)
Opera 36+第6版
Safari 1~2.0.x第3版(部分)
Safari 3.1~5.1第5版(部分)
Safari 6~8第5版
Safari 9+第6版
iOS Safari 3.2~5.1第5版(部分)
iOS Safari 6~8.4第5版
iOS Safari 9.2+第6版
Chrome 1~3第3版
Chrome 4~22第5版(部分)
Chrome 23+第5版
Chrome 42~48第6版(部分)
Chrome 49+第6版
Firefox 1~2第3版
Firefox 3.0.x~20第5版(部分)
Firefox 21~44第5版
Firefox 45+第6版

1.2.2 DOM

文档对象模型(DOM,Document Object Model)是一个应用编程接口(API),用于在HTML中使用扩展的XML. DOM通过创建表示文档的树,让开发者可以随心所欲地控制网页的内容和结构。使用DOM API,可以轻松地删除、添加、替换、修改节点。

DOM级别

DOM并非只能通过JavaScript访问,而且确实被其他很多语言实现了。不过对于浏览器来说,DOM就是使用ECMAScript实现的,如今已经成为JavaScript语言的一大组成部分。

DOM Level 1的目标是映射文档结构.

DOM Level 2新增了以下模块:

  • DOM视图:描述追踪文档不同视图(如应用CSS样式前后的文档)的接口。
  • DOM事件:描述事件及事件处理的接口。
  • DOM样式:描述处理元素CSS样式的接口。
  • DOM遍历和范围:描述遍历和操作DOM树的接口。

DOM Level 3进一步扩展了DOM,增加了以统一的方式加载和保存文档的方法(包含在一个叫DOM Load and Save的新模块中),还有验证文档的方法(DOM Validation)

目前,W3C不再按照Level来维护DOM了,而是作为DOM Living Standard来维护,其快照称为DOM4。DOM4新增的内容包括替代Mutation Events的Mutation Observers。

其他DOM

除了DOM Core和DOM HTML接口,有些其他语言也发布了自己的DOM标准。下面列出的语言是基于XML的,每一种都增加了该语言独有的DOM方法和接口:

  • 可伸缩矢量图(SVG,Scalable Vector Graphics)
  • 数学标记语言(MathML,Mathematical Markup Language)
  • 同步多媒体集成语言(SMIL,Synchronized Multimedia Integration Language)

1.2.3 BOM

浏览器对象模型(BOM) API,用于支持访问和操作浏览器的窗口:

  • 弹出新浏览器窗口的能力;
  • 移动、缩放和关闭浏览器窗口的能力;
  • navigator对象,提供关于浏览器的详尽信息;
  • location对象,提供浏览器加载页面的详尽信息;
  • screen对象,提供关于用户屏幕分辨率的详尽信息;
  • performance对象,提供浏览器内存占用、导航行为和时间统计的详尽信息;
  • 对cookie的支持;
  • 其他自定义对象,如XMLHttpRequest和IE的ActiveXObject。