JavaScript是一種專爲網頁交互而設計的腳本語言,由下列三個不同的部分組成:
- 核心(ECMAScript),由ECMA-262定義,提供核心語言功能;
- 文檔對象模型(DOM),提供訪問和操作網頁內容的方法和接口;
- 瀏覽器對象模型(BOM),提供與瀏覽器交互的方法和接口。
1、ECMAScript
規定了這門語言的下列組成部分:
2、文檔對象模型(DOM)
DOM是針對XML但經過擴展用於HTML的應用程序編程接口(API, Application Programming Interface)。
DOM把整個頁面映射爲一個多層節點結構。
DOM級別:
主要用於映射文檔的結構。
由兩個模塊組成:DOM核心(DOM Core) 和DOM HTML
在原來DOM的基礎上又擴充了鼠標和用戶界面事件、範圍、遍歷(迭代DOM文檔的方法)等細分模塊,而且通過對象接口增加了對CSS的支持。
引入新模塊:
-
- DOM視圖:定義了跟蹤不同文檔視圖的接口;
- DOM事件:定義了事件和事件處理的接口;
- DOM樣式:定義了基於CSS爲元素應用樣式的接口;
- DOM遍歷和範圍:定義了遍歷和操作文檔的接口。
- DOM3級:
引入了以統一方式加載和保存文檔的方法——在DOM加載和保存(DOM Load and Save) 模塊中定義;
新增了驗證文檔的方法——在DOM驗證(DOM Validation)模塊中定義。
3、瀏覽器對象模型(BOM)
根本上講,BOM只是處理瀏覽器窗口和框架;
習慣上,也把所有針對瀏覽器的JavaScript擴展算作BOM的一部分:
- 彈出新瀏覽器窗口的功能
- 移動、縮放和關閉瀏覽器窗口的功能
- 提供瀏覽器詳細信息的navigator對象
- 提供瀏覽器所加載頁面的詳細信息的location對象
- 提供用戶顯示器分辨率詳細信息的screen對象
- 對cookies的支持
- 像 XMLHttpRequest 和 IE 的 ActiveXObject 這樣的自定義對象
在HTML中使用JavaScript
1、<script>元素
向HTML頁面中插入JavaScript的主要方法,就是使用<script>元素。
方式有兩種:
例如:<script type = "text/javascript"
src="example.js"></script>
外部引用的優點:
- 可維護性
- 可緩存
- 適應未來
無論是直接嵌入還是外部引入,只要不存在defer 和 async 屬性,解釋器對JavaScript代碼是從上至下依次解析的。在解析完成之前,頁面中的其餘內容都不會被瀏覽器加載或顯示。
2、標籤的位置
傳統做法是將所有<script>元素都放在頁面的<head>元素中。對於那些需要很多JavaScript代碼的頁面來說,會導致瀏覽器在呈現頁面時出現明顯的延遲,而延遲期間的瀏覽器窗口一片空白。爲了避免這一問題,一般把全部JavaScript引用放在<body>元素中頁面內容的後面。
3、延遲腳本
例子:<script type="text/javascript" defer="defer" src="example.js"></script>
defer屬性只適用於外部js文件。
用途是表明腳本在執行時不會影響頁面的構造。即,腳本會被延遲到整個頁面都解析完畢後再運行。
有些瀏覽器會忽略這個屬性,所以,把延遲腳本放在頁面底部仍是最佳選擇
4、異步腳本
例子:<script type="text/javascript" async src="example1.js"></script>
<script type="text/javascript" async src="example2.js"></script>
async 屬性也只適用於外部js文件。
指定async屬性的目的是不讓頁面等待這兩個腳本的下載和執行,從而異步加載頁面的其他內容。因此,建議異步腳本不要在加載期間修改DOM。
☞:標記爲async的腳本並不保證按照他們的先後順序執行,因此,要確保兩者之間互不依賴。
5、<noscript>元素
使用<noscript>元素可以指定在不支持腳本的瀏覽器中顯示替代的內容,從而實現讓網頁平穩退化。
包含在 <noscript>元素中的內容只有在以下兩種情況下才會顯示出來:
在啓用腳本的情況下,瀏覽器中不會顯示 <noscript>元素中的任何內容。
<body>
<noscript>
<p>本頁面需要瀏覽器支持(並啓用)JavaScript</p>
</noscript>
</body>