JavaScript簡介
JavaScript歷史
客戶端完成表單驗(yàn)證-
JavaScript是什么
ECMAScript + DOM + BOM- ECMAScript
- 由ECMA-262定義,提供核心語言功能
- DOM(document object model 文檔對(duì)象模型)
- 提供訪問和操作網(wǎng)頁內(nèi)容的方法和接口
- 針對(duì)XML但經(jīng)過擴(kuò)展用于HTML的應(yīng)用程序編程接口(API),可以把整個(gè)頁面映射為一個(gè)多層節(jié)點(diǎn)結(jié)構(gòu)。
- 開發(fā)人員無需重新加載網(wǎng)頁,就可以修改其外觀和內(nèi)容。
- DOM1級(jí):映射文檔借口
- DOM2級(jí):views視圖 events事件 style樣式 traversal and range遍歷和范圍
- BOM(browswe object model 瀏覽器模型對(duì)象)
- 提供與瀏覽器交互的方法和接口
- ECMAScript
-
JavaScript與ECMAScript的關(guān)系
- web瀏覽器只是ECMAScript實(shí)現(xiàn)可能的宿主環(huán)境之一,兩者無依賴關(guān)系。宿主環(huán)境提供ECMAScript的實(shí)現(xiàn)和擴(kuò)展,如JavaScript。
JavaScript的不同版本
在HTML中使用JavaScript
- <script>元素
- 使用方式
直接在頁面中嵌入或者包含外部文件。
只要不存在defer和async,瀏覽器都會(huì)按照<script>元素在頁面中出現(xiàn)的先后順序?qū)λ鼈円来芜M(jìn)行解析。 - 標(biāo)簽位置
- 傳統(tǒng)做法:放置<head>中,意味著必須等到全部JavaScript代碼都被下載解析和執(zhí)行完成之后才開始呈現(xiàn)內(nèi)容,有可能會(huì)導(dǎo)致延遲。
- 現(xiàn)代web應(yīng)用程序一般都會(huì)把全部JavaScript引用放在<body>元素中頁面內(nèi)容的后面,這樣顯示空白頁面的時(shí)間會(huì)縮短。
- 6個(gè)屬性:
- 使用方式
| 屬性 | 作用 |
|---|---|
| async | 立即下載腳本(只對(duì)外部腳本有效)異步執(zhí)行 |
| charset | 字符集(大多數(shù)瀏覽器會(huì)忽略) |
| defer | 延遲到文檔完全被解析和顯示之后執(zhí)行(只對(duì)外部腳本有效) |
| src | 包含要執(zhí)行代碼的外部條件 |
| language | 已廢棄 |
| type | 腳本語言類型,默認(rèn)為text/javascript |
- 嵌入代碼與外部文件
- 外部條件的優(yōu)點(diǎn)
- 可維護(hù)性:HTML和JavaScript代碼分離,結(jié)構(gòu)和邏輯行為分離
- 可緩存:文件只需下載一次
- 適應(yīng)未來
- 外部條件的優(yōu)點(diǎn)
變量、作用域和內(nèi)存問題
基本類型
- Undefined
- Null
- Number
- Boolean
- String
注意
- 不能給基本類型添加屬性
- 函數(shù)參數(shù)按值傳遞(見以下例子)
function setName(obj) {
obj.name = "Nicholas";
obj = new Object();
obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); // "Nicholas"
上述例子中,創(chuàng)建了一個(gè)對(duì)象,并將其保存在變量 person 中。然后,這個(gè)變量被傳遞到 setName() 函數(shù)中之后就復(fù)制給了 obj (注意不是引用)。
在這個(gè)函數(shù)內(nèi)部,obj 和 person 引用的是同一個(gè)對(duì)象(即使是按值傳遞)。
然而當(dāng)函數(shù)內(nèi)部 重寫 obj 時(shí),這個(gè)變量引用的就是一個(gè)局部對(duì)象了。而這個(gè)局部對(duì)象會(huì)在函數(shù)執(zhí)行完畢后立刻被銷毀。
檢測(cè)類型
- typeof 檢測(cè)基本類型
- instanceof 檢測(cè)引用類型
執(zhí)行環(huán)境及作用域
- 執(zhí)行環(huán)境僅分為全局和局部(函數(shù))
- JavaScript 沒有塊級(jí)作用域
垃圾回收
JavaScript 是一門具有自動(dòng)垃圾收集機(jī)制的編程語言,因而我們不必關(guān)心內(nèi)存分配和回收問題。
目前主流的垃圾收集算法是“標(biāo)記清除”。