2022 年 6 月 19 日

浏览器环境、规范

最初,JavaScript 语言是为网络浏览器创建的。从那时起,它已演变为一种具有多种用途和平台的语言。

平台可以是浏览器、网络服务器或其他主机,甚至可以是“智能”咖啡机(如果它可以运行 JavaScript)。其中每一个都提供特定于平台的功能。JavaScript 规范称之为主机环境

除了语言核心之外,主机环境还提供自己的对象和函数。网络浏览器提供控制网页的方法。Node.js 提供服务器端功能,依此类推。

以下是 JavaScript 在网络浏览器中运行时的概览

有一个名为 window 的“根”对象。它有两个作用

  1. 首先,它是一个 JavaScript 代码的全局对象,如 全局对象 一章中所述。
  2. 其次,它表示“浏览器窗口”,并提供控制它的方法。

例如,我们可以将它用作全局对象

function sayHi() {
  alert("Hello");
}

// global functions are methods of the global object:
window.sayHi();

我们可以将它用作浏览器窗口,以显示窗口高度

alert(window.innerHeight); // inner window height

还有更多特定于窗口的方法和属性,我们将在后面介绍。

DOM(文档对象模型)

文档对象模型,简称 DOM,将所有页面内容表示为可修改的对象。

document 对象是页面的主要“入口点”。我们可以使用它更改或创建页面上的任何内容。

例如

// change the background color to red
document.body.style.background = "red";

// change it back after 1 second
setTimeout(() => document.body.style.background = "", 1000);

在这里,我们使用了 document.body.style,但还有更多。属性和方法在规范中进行了描述:DOM Living Standard

DOM 不仅适用于浏览器

DOM 规范解释了文档的结构,并提供了用于操作它的对象。还有一些非浏览器工具也使用 DOM。

例如,下载 HTML 页面并处理它们的服务器端脚本也可以使用 DOM。不过,它们可能只支持规范的一部分。

用于样式的 CSSOM

还有一个单独的规范,CSS 对象模型 (CSSOM),用于 CSS 规则和样式表,它解释了它们如何表示为对象,以及如何读取和写入它们。

当我们修改文档的样式规则时,CSSOM 与 DOM 一起使用。不过,在实践中,CSSOM 很少需要,因为我们很少需要从 JavaScript 修改 CSS 规则(通常我们只是添加/删除 CSS 类,而不是修改它们的 CSS 规则),但这也是可能的。

BOM(浏览器对象模型)

浏览器对象模型 (BOM) 表示浏览器(主机环境)提供的用于处理文档之外所有内容的附加对象。

例如

  • navigator 对象提供有关浏览器和操作系统的背景信息。有很多属性,但最广为人知的是:navigator.userAgent - 关于当前浏览器,和 navigator.platform - 关于平台(可以帮助区分 Windows/Linux/Mac 等)。
  • 通过 location 对象,我们可以读取当前 URL,并且可以将浏览器重定向到一个新的 URL。

以下是我们可以使用 location 对象的方式

alert(location.href); // shows current URL
if (confirm("Go to Wikipedia?")) {
  location.href = "https://wikipedia.org"; // redirect the browser to another URL
}

函数 alert/confirm/prompt 也是 BOM 的一部分:它们与文档没有直接关系,而是代表与用户通信的纯浏览器方法。

规范

BOM 是通用 HTML 规范 的一部分。

是的,你没有听错。位于 https://html.whatwg.com.cn 的 HTML 规范不仅涉及“HTML 语言”(标签、属性),还涵盖了许多对象、方法和浏览器特定的 DOM 扩展。这就是“广义上的 HTML”。此外,某些部分还有在 https://spec.whatwg.org 列出的其他规范。

总结

谈到标准,我们有

DOM 规范
描述文档结构、操作和事件,请参阅 https://dom.spec.whatwg.org
CSSOM 规范
描述样式表和样式规则、对其进行操作以及它们与文档的绑定,请参阅 https://www.w3.org/TR/cssom-1/
HTML 规范
描述 HTML 语言(例如,标签)以及 BOM(浏览器对象模型)——各种浏览器函数:setTimeoutalertlocation 等,请参阅 https://html.whatwg.com.cn。它采用 DOM 规范,并用许多其他属性和方法对其进行扩展。

此外,某些类在 https://spec.whatwg.org/ 中单独描述。

请注意这些链接,因为有太多内容需要学习,不可能涵盖所有内容并记住所有内容。

当你想了解某个属性或方法时,位于 https://mdn.org.cn/en-US/ 的 Mozilla 手册也是一个不错的资源,但相应的规范可能更好:它更复杂、阅读起来更费时,但会让你的基础知识变得扎实而完整。

为了找到某些内容,通常可以方便地使用互联网搜索“WHATWG [术语]”或“MDN [术语]”,例如 https://google.com?q=whatwg+localstoragehttps://google.com?q=mdn+localstorage

现在,我们将开始学习 DOM,因为文档在 UI 中扮演着核心角色。

教程地图

评论

在评论之前请先阅读此内容…
  • 如果您有改进建议,请提交 GitHub 问题或提交拉取请求,而不是进行评论。
  • 如果您无法理解文章中的某些内容,请详细说明。
  • 要插入几个单词的代码,请使用 <code> 标记,对于多行代码,请使用 <pre> 标记将它们包装起来,对于 10 行以上的代码,请使用沙盒 (plnkrjsbincodepen…)