JavaScript 技术概览

介绍

HTML 定义网页的结构与内容,CSS 定义其格式与样式,而 JavaScript 则为网页增加可交互性,创作功能丰富的 Web 应用。

但是,如果从浏览器的范畴去理解“JavaScript”这个术语,它包含了截然不同的两个方面。一方面是 JavaScript 的核心语言(ECMAScript),另一方面是大量的 Web API (en-US) 们,包括 DOM(文档对象模型)。

JavaScript 核心语言(ECMAScript)

JavaScript 的核心语言是 ECMAScript。ECMAScript 是一门由 ECMA TC39 委员会标准化的编程语言。

该核心语言同样可以被用在非浏览器环境之中,例如 node.js

哪些内容被纳入 ECMAScript 范畴之中?

除却一些其他元素,ECMAScript 定义了:

  • 语法(解析规则,关键词,流程控制,对象初始化,等等)
  • 错误处理机制(throwtry...catch,以及创建用户定义错误类型的能力)
  • 类型(布尔值,数字,字符串,函数,对象,等等)
  • 全局对象。在浏览器环境中,这个全局对象就是 window 对象,但是 ECMAScript 只定义那些不特定于浏览器的 API(例如,parseIntparseFloatdecodeURIencodeURI,等等)
  • 基于原型的继承机制
  • 内置对象和函数(JSONMathArray.prototype 方法、对象内省(自检、自我检查,introspection)方法,等等)
  • Strict mode

浏览器支持

As of October 2016, the current versions of the major Web browsers implement ECMAScript 5.1 and ECMAScript 2015, but older versions (still in use) implement ECMAScript 5 only.

截止 2014 年 8 月份,主流浏览器的最新版本都已经支持 ECMAScript 5.1,但是旧版本的浏览器大多仅支持 ECMAScript 3 和 ECMAScript 5 的部分标准。这里是一些关于 ECMAScript 5 的浏览器支持情况的资料。如今,主流浏览器的最新版本已经支持 ECMAScript 6 的大部分标准。

未来

The major 6th Edition of ECMAScript was officially approved and published as a standard on June 17, 2015 by the ECMA General Assembly. Since then ECMAScript Editions are published on a yearly basis.

ECMA-262(ECMAScript 4 或者 ES4)第4版的提议本应成为自1999年第3版发布以来的一次重要更新,但是在2008年8月份,ECMAScript第4版被回退到一个代号为ECMAScript Harmony的项目,像const关键字以及对象代理等内容都被涵盖其中。你可以在这里跟踪这个项目的进展。ECMA 委员会已经在 2015年6月17号,正式发布了第6版标准。

国际化 API

由 ECMA TC39 进行标准化的ECMAScript 国际化 API 规范是在 ECMAScript 语言规范之上额外增加的。国际化 API 为 JavaScript 提供了国际化的规则排序(字符串比较)、数字格式化、日期时间格式化等功能,能够让应用选择语言,并根据实际需要选用功能。本标准在 2012 年 12 月审批通过,可以在 MDN 的 Intl 页面查看各个浏览器对其的实现情况。The Internationalization specification is nowadays also ratified on a yearly basis and browsers constantly improve their implementation.

DOM API

WebIDL

WebIDL 规范定义了 ECMAScript 和 DOM 技术之间的交互规范。

DOM 的核心

文档对象模型(DOM)是用来表达 HTML、XHTML 及 XML 文档中的对象或与其进行交互的约定,它是跨平台的,并且与编程语言无关。通过调用DOM树上对象的方法可以操纵这些对象。文档对象模型核心是由  W3C (en-US) 进行标准化的,它将 HTML 和 XML 文档抽象成对象,并在其上定义接口以及操纵这些对象的机制,DOM 定义的元素有:

从 ECMAScript 的角度来看,DOM 规范中定义的对象被称作“宿主对象”。

HTML DOM

HTML,Web 的标记语言,是根据 DOM 定义的。位于 DOM 核心抽象概念之上,HTML 还定义了元素的意义。比如元素的 className 属性以及例如 document.body 这样的 API。

HTML规范同时还约束了元素之间的关系,例如无序列表 <ul> 元素中,只能以 <li> 元素作为子元素来表达列表项。还有就是禁止使用标准中未定义的元素和属性。

想了解更多关于 Document 对象、Window 对象以及其他DOM元素的信息?请访问 MDN 的 DOM 文档

其他值得关注的 API

DOM 浏览器支持

相信每个 Web 开发人员都曾经有过“DOM就是一团糟”的体验,因为浏览器对 DOM 的支持千差万别。造成这种局面的主要原因是DOM 规范并未清晰定义很多重要的 DOM 特性。另外,一些浏览器也增加了不兼容的特性(例如 Intenet Explorer 的事件模型)。自 2011 年 6 月以来,W3C,特别是 WHATWG 都在对旧特性进行细节定义,以提高互通性。浏览器也在基于这些更加详细的规范改善它们的实现方式。

要实现跨浏览器的兼容性,一个常见的但可能不是最可靠的方式就是使用 JavaScript 库。这些库对于 DOM 特性进行抽象,以确保它们所提供的 API 在不同的浏览器上行为一致。被广泛采用的框架有 jQueryprototypeYUI