JS高程笔记-What Is JavaScript?

Reading time ~33 minutes

尽管经常将 JavaScript 和 ECMAScript 用作同义词,但 JavaScript 不仅限于 ECMA-262 中定义的内容。实际上,一个完整的 JavaScript 实现由以下三个不同的部分组成:ECMAScript、DOM (Document Object Model)和 BOM (Browser Object Model)。

一、JavaScript 的历史

当 JavaScript 在 1995 年出现时,它的主要目的是处理以前留给服务器端语言(例如 Perl)的某些输入验证的任务(省去了服务端验证的往返时间)。之后 JavaScript 便成为市场上主流浏览器的重要功能。JavaScript 不再局限于简单的数据验证,现在可以与浏览器窗口及其内容的几乎所有方面进行交互。

  • 诞生

    1995 年,Netscape 的程序员 Brendan Eich 为 Netscape Navigator 2 的发布开发一种名为 Mocha(后来更名为 LiveScript)的脚本语言。目的是在浏览器和服务器上都使用它,被称为 LiveWire。而当 Netscape Navigator 2 正式发布时,Netscape 为了利用 Java 的名声,将 LiveScript 更名为 JavaScript。

  • 两家争霸

    由于 JavaScript 1.0 非常受欢迎,Netscape 在 Netscape Navigator 3 中发布了 1.1 版。不久之后微软发布了 Internet Explorer 3,其带有一个称为 JScript 的 JavaScript 实现。

  • 标准化

    没有统一的标准势必影响 JavaScript 的发展。1997 年,JavaScript 1.1 作为提案提交给了欧洲计算机制造商协会(European Computer Manufacturers Association, ECMA)。分配了第 39 技术委员会(TC39)以“标准化通用、跨平台、与供应商无关的脚本语言的语法和语义”。TC39 花了几个月的时间来敲定 ECMA-262,该标准定义了一种新的脚本语言,名为 ECMAScript(通常发音为 “ ek-ma-script”)。

二、JavaScript 和 ECMAScript 的关系

尽管经常将 JavaScript 和 ECMAScript 用作同义词,但 JavaScript 不仅限于 ECMA-262 中定义的内容。实际上,一个完整的 JavaScript 实现由以下三个不同的部分组成:

  • ECMAScript
  • DOM (Document Object Model)
  • BOM (Browser Object Model)

Web 浏览器只是一种其中可能存在 ECMAScript 实现的宿主环境。其他宿主环境包括 NodeJS——一个服务器端 JavaScript 平台以及日益淘汰的 Adobe Flash。

ECMAScript 只是对语言的描述,该语言实现了规范中描述的所有方面。JavaScript 实现了 ECMAScript,Adobe ActionScript 也实现了它。

三、ECMAScript 版本

版本 发表日期 与前版本的差异
1 1997 年 6 月 首版
2 1998 年 6 月 格式修正,以使其形式与 ISO/IEC16262 国际标准一致。
3 1999 年 12 月 强大的正则表达式、更好的词法作用域链处理、新的控制指令、异常处理、更加明确的错误定义、数据输出的格式化等。
4 放弃 由于关于语言的复杂性出现分歧,第 4 版本被放弃,其中的部分成为了第 5 版本及 Harmony 的基础。(到 2008 年 8 月,ECMAScript 第 4 版提案已缩减为一个代号为 ECMAScript Harmony 的项目)
5 2009 年 12 月 新增“严格模式(strict mode)”,提供更彻底的错误检查,以避免容易出错的结构。阐明了第三版规范中的许多歧义,并适应了与该规范不一致的现实世界实现的行为。添加了一些新功能,例如 getter 和 setter,对 JSON 的库支持以及对对象属性的更完整反射。
5.1 2011 年 6 月 使规范更符合 ISO/IEC 16262:2011 第三版。
6 2015 年 6 月 ECMAScript 2015(ES2015),第 6 版,最早被称作是 ECMAScript 6(ES6),添加了类和模块的语法,其他特性包括迭代器、Python 风格的生成器和生成器表达式、箭头函数、二进制数据、静态类型数组、集合(maps,sets 和 weak maps)、promise、reflection 和 proxies。作为最早的 ECMAScript Harmony 版本,也被叫做 ES6 Harmony。
7 2016 年 6 月 ECMAScript 2016(ES2016),第 7 版,多个新的概念和语言特性,例如 Array.prototype.includes、求幂运算符 (**)和异步编程的 await 与 async 关键字。
8 2017 年 6 月 ECMAScript 2017(ES2017),第 8 版,多个新的概念和语言特性,例如 Object.values()、Object.entries()、String padding: padStart()padEnd()、函数参数列表结尾允许逗号、Object.getOwnPropertyDescriptors()和 async 函数。
9 2018 年 6 月 ECMAScript 2018 (ES2018),第 9 版,多个新的概念和语言特性,例如异步迭代,新的正则表达式特性和 rest/spread 语法和 Promise.prototype.finally。
10 2019 年 6 月 ECMAScript 2019 (ES2019),第 10 版,多个新的概念和语言特性,例如 Array.prototype.flat、Array.prototype.flatMap、稳定的 Array.sort 和 Object.fromEntries。
11 2020 年 6 月 ECMAScript 2020 (ES2020),第 11 版,多个新的概念和语言特性,例如无效合并运算符(??)、BigInt 和 Promise.allSettled。

到 2008 年,五种主要的网络浏览器(Internet Explorer,Firefox,Safari,Chrome 和 Opera)均符合第三版 ECMA-262。Internet Explorer 8 是第一个实施第五版 ECMA-262 规范的浏览器,并在 Internet Explorer 9 中提供了完整的支持。Firefox 4 紧随其后。

四、DOM

文档对象模型(DOM)是 HTML 和 XML 文档的编程接口。W3C(World Wide Web Consortium )负责 DOM 标准的制定。

需要注意 DOM 不是特定于 JavaScript 的,实际上已被多种其他语言实现。但是,对于 Web 浏览器,已经使用 ECMAScript 实现了 DOM,现在 DOM 构成了 JavaScript 语言的很大一部分。

DOM 级别:

级别 说明
DOM 0 级 注意没有 DOM 0 级的标准,它只是 DOM 历史上的参考点。DOM 0 级被认为是 Internet Explorer 4.0 和 Netscape Navigator 4.0 最初支持的 DHTML。
DOM 1 级 DOM1 级(DOM Level 1)于 1998 年 10 月成为 W3C 的推荐标准。DOM1 级由两个模块组成:DOM 核心(DOM Core)和 DOM HTML。其中,DOM 核心规定的是如何映射基于 XML 的文档结构,以便简化对文档中任意部分的访问和操作。DOM HTML 模块则在 DOM 核心的基础上加以扩展,添加了针对 HTML 的对象和方法。
DOM 2 级 如果说 DOM1 级的目标主要是映射文档的结构,那么 DOM2 级的目标就要宽泛多了。DOM2 级在原来 DOM 的基础上又扩充了(DHTML 一直都支持的)鼠标和用户界面事件、范围、遍历(迭代 DOM 文档的方法)等细分模块,而且通过对象接口增加了对 CSS(Cascading Style Sheets,层叠样式表)的支持。DOM1 级中的 DOM 核心模块也经过扩展,支持 XML 命名空间。DOM2 级引入了下列新模块,以处理新类型和新接口:DOM 视图(DOM Views):定义了跟踪不同文档(例如,应用 CSS 之前和之后的文档)视图的接口;DOM 事件(DOM Events):定义了事件和事件处理的接口;DOM 样式(DOM Style):定义了处理元素 CSS 样式的接口;DOM 遍历和范围(DOM Traversal and Range):定义了遍历和操作文档树的接口。
DOM 3 级 DOM3 级则进一步扩展了 DOM,引入了以统一方式加载和保存文档的方法(在 DOM Load and Save 模块中定义);新增了验证文档的方法(在 DOM Validation 模块中定义)。DOM3 级也对 DOM 核心进行了扩展,支持 XML 1.0 规范,包括 XML Infoset、XPath 和 XML Base。

当前,W3C 不再将 DOM 维护为一系列级别,而是将其作为 DOM Living Standard,将其快照称为 DOM4。其中一个更新是用 Mutation Observers 替代 Mutation Events。

参考链接

埋点上报

前端埋点上报代码片段 Continue reading

批量上报

Published on November 16, 2023

页面打开成功率

Published on November 15, 2023