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.spec.whatwg.org 的 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.spec.whatwg.org。它採用 DOM 規格並延伸許多額外的屬性和方法。

此外,某些類別會在 https://spec.whatwg.org/ 中個別描述。

請注意這些連結,因為有太多內容需要學習,不可能涵蓋所有內容並記住所有內容。

當你想閱讀關於屬性或方法時,位於 https://developer.mozilla.org/en-US/ 的 Mozilla 手冊也是一個不錯的資源,但對應的規格可能更好:它較複雜且閱讀時間較長,但會讓你的基礎知識更紮實且完整。

要找到某個東西,通常可以使用網路搜尋「WHATWG [術語]」或「MDN [術語]」,例如 https://google.com?q=whatwg+localstoragehttps://google.com?q=mdn+localstorage

現在,我們將開始學習 DOM,因為文件在 UI 中扮演著核心角色。

教學課程地圖

留言

留言前請先閱讀這段…
  • 如果你有建議要如何改進 - 請 提交 GitHub 問題 或提交 pull 要求,而不是留言。
  • 如果你無法理解文章中的某些內容 - 請詳細說明。
  • 要插入幾行程式碼,請使用 <code> 標籤,要插入多行程式碼 - 請將它們包在 <pre> 標籤中,要插入超過 10 行程式碼 - 請使用沙盒 (plnkrjsbincodepen…)