什么是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。