JavaScript 語言最初是為網路瀏覽器所創建。從那時起,它已演變成一種具有許多用途和平台的語言。
平台可以是瀏覽器、網頁伺服器或其他主機,甚至可以是「智慧」咖啡機,只要它可以執行 JavaScript。其中每一個都提供特定於平台的功能。JavaScript 規範稱之為主機環境。
主機環境除了語言核心之外,還提供自己的物件和函式。網路瀏覽器提供控制網頁的方法。Node.js 提供伺服器端功能,等等。
以下是在網路瀏覽器中執行 JavaScript 時,我們所擁有的概觀
有一個稱為window
的「根」物件。它有兩個角色
- 首先,它是 JavaScript 程式碼的全局物件,如章節 全局物件 中所述。
- 其次,它代表「瀏覽器視窗」並提供控制它的方法。
例如,我們可以將它用作全局物件
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。
例如,下載 HTML 頁面並處理它們的伺服器端腳本也可以使用 DOM。不過,它們可能只支援規格的一部分。
還有一個單獨的規格,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(瀏覽器物件模型)—各種瀏覽器函式:
setTimeout
、alert
、location
等,請參閱 https://html.spec.whatwg.org。它採用 DOM 規格並延伸許多額外的屬性和方法。
此外,某些類別會在 https://spec.whatwg.org/ 中個別描述。
請注意這些連結,因為有太多內容需要學習,不可能涵蓋所有內容並記住所有內容。
當你想閱讀關於屬性或方法時,位於 https://developer.mozilla.org/en-US/ 的 Mozilla 手冊也是一個不錯的資源,但對應的規格可能更好:它較複雜且閱讀時間較長,但會讓你的基礎知識更紮實且完整。
要找到某個東西,通常可以使用網路搜尋「WHATWG [術語]」或「MDN [術語]」,例如 https://google.com?q=whatwg+localstorage、https://google.com?q=mdn+localstorage。
現在,我們將開始學習 DOM,因為文件在 UI 中扮演著核心角色。
留言
<code>
標籤,要插入多行程式碼 - 請將它們包在<pre>
標籤中,要插入超過 10 行程式碼 - 請使用沙盒 (plnkr、jsbin、codepen…)