本書(shū)是java script 超級(jí)暢銷(xiāo)書(shū)的最新版。ECMAScript 5 和HTML5 在標(biāo)準(zhǔn)之爭(zhēng)中雙雙勝出,使大量專(zhuān)有實(shí)現(xiàn)和客戶(hù)端擴(kuò)展正式進(jìn)入規(guī)范,同時(shí)也為java script 增添了很多適應(yīng)未來(lái)發(fā)展的新特性。本書(shū)這一版除增加5 章全新內(nèi)容外,其他章節(jié)也有較大幅度的增補(bǔ)和修訂,新內(nèi)容篇幅約占三分之一。全書(shū)從java script 語(yǔ)言實(shí)現(xiàn)的各個(gè)組成部分——語(yǔ)言核心、DOM、BOM、事件模型講起,深入淺出地探討了面向?qū)ο缶幊、Ajax 與Comet 服務(wù)器端通信,HTML5 表單、媒體、Canvas(包括WebGL)及Web Workers、地理定位、跨文檔傳遞消息、客戶(hù)端存儲(chǔ)(包括IndexedDB)等新API,還介紹了離線應(yīng)用和與維護(hù)、性能、部署相關(guān)的最佳開(kāi)發(fā)實(shí)踐。本書(shū)附錄展望了未來(lái)的API 和ECMAScript Harmony 規(guī)范。 本書(shū)適合有一定編程經(jīng)驗(yàn)的Web 應(yīng)用開(kāi)發(fā)人員閱讀,也可作為高校及社會(huì)實(shí)用技術(shù)培訓(xùn)相關(guān)專(zhuān)業(yè)課程的教材。 作者簡(jiǎn)介
作者簡(jiǎn)介: Nicholas C. Zakas(尼古拉斯?澤卡斯)世界頂級(jí)Web技術(shù)專(zhuān)家,現(xiàn)為雅虎公司界面呈現(xiàn)架構(gòu)師,負(fù)責(zé)My Yahoo!和雅虎首頁(yè)等大訪問(wèn)量站點(diǎn)的設(shè)計(jì)。尼古拉斯擁有豐富的Web開(kāi)發(fā)和界面設(shè)計(jì)經(jīng)驗(yàn),曾經(jīng)參與許多世界級(jí)大公司的Web解決方案開(kāi)發(fā)。他還是High Performance java script一書(shū)的作者,并與他人合作撰寫(xiě)了Professional Ajax和Even Faster Web Sites。尼古拉斯擁有梅里馬克學(xué)院計(jì)算機(jī)科學(xué)學(xué)士學(xué)位和埃迪柯特學(xué)院的MBA學(xué)位。他的個(gè)人網(wǎng)站是www.nczonline.net,他的Twitter別名是@slicknet。
目錄: 目 錄 第1章 java script簡(jiǎn)介 1 1.1 java script簡(jiǎn)史 1 1.2 java script實(shí)現(xiàn) 2 1.2.1 ECMAScript 3 1.2.2 文檔對(duì)象模型(DOM) 5 1.2.3 瀏覽器對(duì)象模型(BOM) 8 1.3 java script版本 8 1.4 小結(jié) 9 第2章 在HTML中使用java script 10 2.1 <script>元素 10 2.1.1 標(biāo)簽的位置 12 2.1.2 延遲腳本 13 2.1.3 異步腳本 13 2.1.4 在XHTML中的用法 14 2.1.5 不推薦使用的語(yǔ)法 16 2.2 嵌入代碼與外部文件 16 2.3 文檔模式 16 2.4 <noscript>元素 18 2.5 小結(jié) 18 第3章 基本概念 19 3.1 語(yǔ)法 19 3.1.1 區(qū)分大小寫(xiě) 19 3.1.2 標(biāo)識(shí)符 19 3.1.3 注釋 20 3.1.4 嚴(yán)格模式 20 3.1.5 語(yǔ)句 20 3.2 關(guān)鍵字和保留字 21 3.3 變量 22 3.4 數(shù)據(jù)類(lèi)型 23 3.4.1 typeof操作符 23 3.4.2 Undefined類(lèi)型 24 3.4.3 Null類(lèi)型 25 3.4.4 Boolean類(lèi)型 26 3.4.5 Number類(lèi)型 27 3.4.6 String類(lèi)型 32 3.4.7 Object類(lèi)型 35 3.5 操作符 36 3.5.1 一元操作符 36 3.5.2 位操作符 39 3.5.3 布爾操作符 44 3.5.4 乘性操作符 47 3.5.5 加性操作符 48 3.5.6 關(guān)系操作符 50 3.5.7 相等操作符 51 3.5.8 條件操作符 53 3.5.9 賦值操作符 53 3.5.10 逗號(hào)操作符 54 3.6 語(yǔ)句 54 3.6.1 if語(yǔ)句 54 3.6.2 do-while語(yǔ)句 55 3.6.3 while語(yǔ)句 55 3.6.4 for語(yǔ)句 56 3.6.5 for-in語(yǔ)句 57 3.6.6 label語(yǔ)句 58 3.6.7 break和continue語(yǔ)句 58 3.6.8 with語(yǔ)句 60 3.6.9 switch語(yǔ)句 60 3.7 函數(shù) 62 3.7.1 理解參數(shù) 64 3.7.2 沒(méi)有重載 66 3.8 小結(jié) 67 第4章 變量、作用域和內(nèi)存問(wèn)題 68 4.1 基本類(lèi)型和引用類(lèi)型的值 68 4.1.1 動(dòng)態(tài)的屬性 68 4.1.2 復(fù)制變量值 69 4.1.3 傳遞參數(shù) 70 4.1.4 檢測(cè)類(lèi)型 72 4.2 執(zhí)行環(huán)境及作用域 73 4.2.1 延長(zhǎng)作用域鏈 75 4.2.2 沒(méi)有塊級(jí)作用域 76 4.3 垃圾收集 78 4.3.1 標(biāo)記清除 78 4.3.2 引用計(jì)數(shù) 79 4.3.3 性能問(wèn)題 80 4.3.4 管理內(nèi)存 81 4.4 小結(jié) 81 第5章 引用類(lèi)型 83 5.1 Object類(lèi)型 83 5.2 Array類(lèi)型 86 5.2.1 檢測(cè)數(shù)組 88 5.2.2 轉(zhuǎn)換方法 89 5.2.3 棧方法 90 5.2.4 隊(duì)列方法 91 5.2.5 重排序方法 92 5.2.6 操作方法 94 5.2.7 位置方法 95 5.2.8 迭代方法 96 5.2.9 縮小方法 97 5.3 Date類(lèi)型 98 5.3.1 繼承的方法 100 5.3.2 日期格式化方法 101 5.3.3 日期/時(shí)間組件方法 102 5.4 RegExp類(lèi)型 103 5.4.1 RegExp實(shí)例屬性 105 5.4.2 RegExp實(shí)例方法 106 5.4.3 RegExp構(gòu)造函數(shù)屬性 107 5.4.4 模式的局限性 109 5.5 Function類(lèi)型 110 5.5.1 沒(méi)有重載(深入理解) 111 5.5.2 函數(shù)聲明與函數(shù)表達(dá)式 111 5.5.3 作為值的函數(shù) 112 5.5.4 函數(shù)內(nèi)部屬性 113 5.5.5 函數(shù)屬性和方法 116 5.6 基本包裝類(lèi)型 118 5.6.1 Boolean類(lèi)型 120 5.6.2 Number類(lèi)型 120 5.6.3 String類(lèi)型 122 5.7 單體內(nèi)置對(duì)象 130 5.7.1 Global對(duì)象 131 5.7.2 Math對(duì)象 134 5.8 小結(jié) 137 第6章 面向?qū)ο蟮某绦蛟O(shè)計(jì) 138 6.1 理解對(duì)象 138 6.1.1 屬性類(lèi)型 139 6.1.2 定義多個(gè)屬性 142 6.1.3 讀取屬性的特性 143 6.2 創(chuàng)建對(duì)象 144 6.2.1 工廠模式 144 6.2.2 構(gòu)造函數(shù)模式 144 6.2.3 原型模式 147 6.2.4 組合使用構(gòu)造函數(shù)模式和原型模式 159 6.2.5 動(dòng)態(tài)原型模式 159 6.2.6 寄生構(gòu)造函數(shù)模式 160 6.2.7 穩(wěn)妥構(gòu)造函數(shù)模式 161 6.3 繼承 162 6.3.1 原型鏈 162 6.3.2 借用構(gòu)造函數(shù) 167 6.3.3 組合繼承 168 6.3.4 原型式繼承 169 6.3.5 寄生式繼承 171 6.3.6 寄生組合式繼承 172 6.4 小結(jié) 174 第7章 函數(shù)表達(dá)式 175 7.1 遞歸 177 7.2 閉包 178 7.2.1 閉包與變量 181 7.2.2 關(guān)于this對(duì)象 182 7.2.3 內(nèi)存泄漏 183 7.3 模仿塊級(jí)作用域 184 7.4 私有變量 186 7.4.1 靜態(tài)私有變量 188 7.4.2 模塊模式 189 7.4.3 增強(qiáng)的模塊模式 191 7.5 小結(jié) 192 第8章 BOM 193 8.1 window對(duì)象 193 8.1.1 全局作用域 193 8.1.2 窗口關(guān)系及框架 194 8.1.3 窗口位置 197 8.1.4 窗口大小 198 8.1.5 導(dǎo)航和打開(kāi)窗口 199 8.1.6 間歇調(diào)用和超時(shí)調(diào)用 203 8.1.7 系統(tǒng)對(duì)話(huà)框 205 8.2 location對(duì)象 207 8.2.1 查詢(xún)字符串參數(shù) 207 8.2.2 位置操作 208 8.3 navigator對(duì)象 210 8.3.1 檢測(cè)插件 211 8.3.2 注冊(cè)處理程序 213 8.4 screen對(duì)象 214 8.5 history對(duì)象 215 8.6 小結(jié) 216 第9章 客戶(hù)端檢測(cè) 217 9.1 能力檢測(cè) 217 9.1.1 更可靠的能力檢測(cè) 218 9.1.2 能力檢測(cè),不是瀏覽器檢測(cè) 220 9.2 怪癖檢測(cè) 220 9.3 用戶(hù)代理檢測(cè) 221 9.3.1 用戶(hù)代理字符串的歷史 222 9.3.2 用戶(hù)代理字符串檢測(cè)技術(shù) 228 9.3.3 完整的代碼 242 9.3.4 使用方法 245 9.4 小結(jié) 246 第10章 DOM 247 10.1 節(jié)點(diǎn)層次 247 10.1.1 Node類(lèi)型 248 10.1.2 Document類(lèi)型 253 10.1.3 Element類(lèi)型 261 10.1.4 Text類(lèi)型 270 10.1.5 Comment類(lèi)型 273 10.1.6 CDATASection類(lèi)型 274 10.1.7 DocumentType類(lèi)型 274 10.1.8 DocumentFragment類(lèi)型 275 10.1.9 Attr類(lèi)型 276 10.2 DOM操作技術(shù) 277 10.2.1 動(dòng)態(tài)腳本 277 10.2.2 動(dòng)態(tài)樣式 279 10.2.3 操作表格 281 10.2.4 使用NodeList 283 10.3 小結(jié) 284 第11章 DOM擴(kuò)展 286 11.1 選擇符API 286 11.1.1 querySelector()方法 286 11.1.2 querySelectorAll() 方法 287 11.1.3 matchesSelector() 方法 288 11.2 元素遍歷 288 11.3 HTML5 289 11.3.1 與類(lèi)相關(guān)的擴(kuò)充 289 11.3.2 焦點(diǎn)管理 291 11.3.3 HTMLDocument的變化 292 11.3.4 字符集屬性 293 11.3.5 自定義數(shù)據(jù)屬性 293 11.3.6 插入標(biāo)記 294 11.3.7 scrollIntoView()方法 298 11.4 專(zhuān)有擴(kuò)展 298 11.4.1 文檔模式 298 11.4.2 children屬性 299 11.4.3 contains()方法 300 11.4.4 插入文本 301 11.4.5 滾動(dòng) 303 11.5 小結(jié) 304 第12章 DOM2和DOM3 305 12.1 DOM變化 305 12.1.1 針對(duì)XML命名空間的變化 306 12.1.2 其他方面的變化 309 12.2 樣式 312 12.2.1 訪問(wèn)元素的樣式 313 12.2.2 操作樣式表 317 12.2.3 元素大小 320 12.3 遍歷 326 12.3.1 NodeIterator 328 12.3.2 TreeWalker 330 12.4 范圍 332 12.4.1 DOM中的范圍 332 12.4.2 IE8及更早版本中的范圍 340 12.5 小結(jié) 343 第13章 事件 345 13.1 事件流 345 13.1.1 事件冒泡 346 13.1.2 事件捕獲 346 13.1.3 DOM事件流 347 13.2 事件處理程序 348 13.2.1 HTML事件處理程序 348 13.2.2 DOM0級(jí)事件處理程序 350 13.2.3 DOM2級(jí)事件處理程序 351 13.2.4 IE事件處理程序 352 13.2.5 跨瀏覽器的事件處理程序 353 13.3 事件對(duì)象 355 13.3.1 DOM中的事件對(duì)象 355 13.3.2 IE中的事件對(duì)象 358 13.3.3 跨瀏覽器的事件對(duì)象 360 13.4 事件類(lèi)型 362 13.4.1 UI事件 362 13.4.2 焦點(diǎn)事件 367 13.4.3 鼠標(biāo)與滾輪事件 368 13.4.4 鍵盤(pán)與文本事件 379 13.4.5 復(fù)合事件 384 13.4.6 變動(dòng)事件 385 13.4.7 HTML5事件 388 13.4.8 設(shè)備事件 395 13.4.9 觸摸與手勢(shì)事件 399 13.5 內(nèi)存和性能 402 13.5.1 事件委托 402 13.5.2 移除事件處理程序 404 13.6 模擬事件 405 13.6.1 DOM中的事件模擬 405 13.6.2 IE中的事件模擬 410 13.7 小結(jié) 411 第14章 表單腳本 412 14.1 表單的基礎(chǔ)知識(shí) 412 14.1.1 提交表單 413 14.1.2 重置表單 414 14.1.3 表單字段 414 14.2 文本框腳本 419 14.2.1 選擇文本 420 14.2.2 過(guò)濾輸入 423 14.2.3 自動(dòng)切換焦點(diǎn) 426 14.2.4 HTML5約束驗(yàn)證API 427 14.3 選擇框腳本 431 14.3.1 選擇選項(xiàng) 432 14.3.2 添加選項(xiàng) 434 14.3.3 移除選項(xiàng) 435 14.3.4 移動(dòng)和重排選項(xiàng) 435 14.4 表單序列化 436 14.5 富文本編輯 438 14.5.1 使用contenteditable 屬性 438 14.5.2 操作富文本 439 14.5.3 富文本選區(qū) 441 14.5.4 表單與富文本 443 14.6 小結(jié) 443 第15章 使用Canvas繪圖 445 15.1 基本用法 445 15.2 2D上下文 446 15.2.1 填充和描邊 446 15.2.2 繪制矩形 447 15.2.3 繪制路徑 449 15.2.4 繪制文本 451 15.2.5 變換 453 15.2.6 繪制圖像 456 15.2.7 陰影 457 15.2.8 漸變 458 15.2.9 模式 460 15.2.10 使用圖像數(shù)據(jù) 460 15.2.11 合成 462 15.3 WebGL 463 15.3.1 類(lèi)型化數(shù)組 463 15.3.2 WebGL上下文 468 15.3.3 支持 478 15.4 小結(jié) 478 第16章 HTML5腳本編程 480 16.1 跨文檔消息傳遞 480 16.2 原生拖放 481 16.2.1 拖放事件 482 16.2.2 自定義放置目標(biāo) 482 16.2.3 dataTransfer對(duì)象 483 16.2.4 dropEffect與effectAllowed 484 16.2.5 可拖動(dòng) 485 16.2.6 其他成員 485 16.3 媒體元素 486 16.3.1 屬性 487 16.3.2 事件 488 16.3.3 自定義媒體播放器 488 16.3.4 檢測(cè)編解碼器的支持情況 489 16.3.5 Audio類(lèi)型 490 16.4 歷史狀態(tài)管理 491 16.5 小結(jié) 492 第17章 錯(cuò)誤處理與調(diào)試 493 17.1 瀏覽器報(bào)告的錯(cuò)誤 493 17.1.1 IE 493 17.1.2 Firefox 494 17.1.3 Safari 496 17.1.4 Opera 497 17.1.5 Chrome 498 17.2 錯(cuò)誤處理 499 17.2.1 try-catch語(yǔ)句 500 17.2.2 拋出錯(cuò)誤 503 17.2.3 錯(cuò)誤(error)事件 505 17.2.4 處理錯(cuò)誤的策略 506 17.2.5 常見(jiàn)的錯(cuò)誤類(lèi)型 507 17.2.6 區(qū)分致命錯(cuò)誤和非致命 錯(cuò)誤 510 17.2.7 把錯(cuò)誤記錄到服務(wù)器 511 17.3 調(diào)試技術(shù) 512 17.3.1 將消息記錄到控制臺(tái) 512 17.3.2 將消息記錄到當(dāng)前頁(yè)面 515 17.3.3 拋出錯(cuò)誤 515 17.4 常見(jiàn)的IE錯(cuò)誤 516 17.4.1 操作終止 516 17.4.2 無(wú)效字符 518 17.4.3 未找到成員 518 17.4.4 未知運(yùn)行時(shí)錯(cuò)誤 519 17.4.5 語(yǔ)法錯(cuò)誤 519 17.4.6 系統(tǒng)無(wú)法找到指定資源 519 17.5 小結(jié) 520 第18章 java script與XML 521 18.1 瀏覽器對(duì)XML DOM的支持 521 18.1.1 DOM2級(jí)核心 521 18.1.2 DOMParser類(lèi)型 522 18.1.3 XMLSerializer類(lèi)型 523 18.1.4 IE8及之前版本中的XML 523 18.1.5 跨瀏覽器處理XML 527 18.2 瀏覽器對(duì)XPath的支持 529 18.2.1 DOM3級(jí)XPath 529 18.2.2 IE中的XPath 534 18.2.3 跨瀏覽器使用XPath 535 18.3 瀏覽器對(duì)XSLT的支持 537 18.3.1 IE中的XSLT 537 18.3.2 XSLTProcessor類(lèi)型 541 18.3.3 跨瀏覽器使用XSLT 543 18.4 小結(jié) 544 第19章 E4X 546 19.1 E4X的類(lèi)型 546 19.1.1 XML類(lèi)型 546 19.1.2 XMLList類(lèi)型 547 19.1.3 Namespace類(lèi)型 548 19.1.4 QName類(lèi)型 549 19.2 一般用法 550 19.2.1 訪問(wèn)特性 551 19.2.2 其他節(jié)點(diǎn)類(lèi)型 552 19.2.3 查詢(xún) 553 19.2.4 構(gòu)建和操作XML 555 19.2.5 解析和序列化 557 19.2.6 命名空間 558 19.3 其他變化 559 19.4 全面啟用E4X 560 19.5 小結(jié) 561 第20章 JSON 562 20.1 語(yǔ)法 562 20.1.1 簡(jiǎn)單值 562 20.1.2 對(duì)象 563 20.1.3 數(shù)組 564 20.2 解析與序列化 565 20.2.1 JSON對(duì)象 565 20.2.2 序列化選項(xiàng) 566 20.2.3 解析選項(xiàng) 569 20.3 小結(jié) 570 第21章 Ajax與Comet 571 21.1 XMLHttpRequest對(duì)象 571 21.1.1 XHR的用法 573 21.1.2 HTTP頭部信息 575 21.1.3 GET請(qǐng)求 576 21.1.4 POST請(qǐng)求 577 21.2 XMLHttpRequest 2級(jí) 578 21.2.1 FormData 578 21.2.2 超時(shí)設(shè)定 579 21.2.3 overrideMimeType() 方法 580 21.3 進(jìn)度事件 580 21.3.1 load事件 580 21.3.2 progress事件 581 21.4 跨源資源共享 582 21.4.1 IE對(duì)CORS的實(shí)現(xiàn) 582 21.4.2 其他瀏覽器對(duì)CORS的 實(shí)現(xiàn) 584 21.4.3 Preflighted Reqeusts 584 21.4.4 帶憑據(jù)的請(qǐng)求 585 21.4.5 跨瀏覽器的CORS 585 21.5 其他跨域技術(shù) 586 21.5.1 圖像Ping 586 21.5.2 JSONP 587 21.5.3 Comet 588 21.5.4 服務(wù)器發(fā)送事件 590 21.5.5 Web Sockets 591 21.5.6 SSE與Web Sockets 593 21.6 安全 593 21.7 小結(jié) 594 第22章 高級(jí)技巧 596 22.1 高級(jí)函數(shù) 596 22.1.1 安全的類(lèi)型檢測(cè) 596 22.1.2 作用域安全的構(gòu)造函數(shù) 597 22.1.3 惰性載入函數(shù) 600 22.1.4 函數(shù)綁定 602 22.1.5 函數(shù)柯里化 604 22.2 防篡改對(duì)象 606 22.2.1 不可擴(kuò)展對(duì)象 606 22.2.2 密封的對(duì)象 607 22.2.3 凍結(jié)的對(duì)象 608 22.3 高級(jí)定時(shí)器 609 22.3.1 重復(fù)的定時(shí)器 610 22.3.2 Yielding Processes 612 22.3.3 函數(shù)節(jié)流 614 22.4 自定義事件 616 22.5 拖放 618 22.5.1 修繕拖動(dòng)功能 620 22.5.2 添加自定義事件 622 22.6 小結(jié) 624 第23章 離線應(yīng)用與客戶(hù)端存儲(chǔ) 626 23.1 離線檢測(cè) 626 23.2 應(yīng)用緩存 627 23.3 數(shù)據(jù)存儲(chǔ) 628 23.3.1 Cookie 629 23.3.2 IE用戶(hù)數(shù)據(jù) 637 23.3.3 Web存儲(chǔ)機(jī)制 638 23.3.4 IndexedDB 643 23.4 小結(jié) 654 第24章 最佳實(shí)踐 656 24.1 可維護(hù)性 656 24.1.1 什么是可維護(hù)的代碼 656 24.1.2 代碼約定 657 24.1.3 松散耦合 659 24.1.4 編程實(shí)踐 662 24.2 性能 666 24.2.1 注意作用域 666 24.2.2 選擇正確方法 667 24.2.3 最小化語(yǔ)句數(shù) 672 24.2.4 優(yōu)化DOM交互 673 24.3 部署 676 24.3.1 構(gòu)建過(guò)程 676 24.3.2 驗(yàn)證 677 24.3.3 壓縮 679 24.4 小結(jié) 681 第25章 新興的API 682 25.1 requestAnimationFrame() 682 25.1.1 早期動(dòng)畫(huà)循環(huán) 682 25.1.2 循環(huán)間隔的問(wèn)題 683 25.1.3 mozRequestAnimation-Frame 683 25.1.4 webkitRequestAnima-tionFrame與msRequest-AnimationFrame 685 25.2 Page Visibility API 686 25.3 Geolocation API 687 25.4 File API 689 25.4.1 FileReader類(lèi)型 690 25.4.2 讀取部分內(nèi)容 692 25.4.3 對(duì)象URL 693 25.4.4 讀取拖放的文件 694 25.4.5 使用XHR上傳文件 695 25.5 Web計(jì)時(shí) 696 25.6 Web Workers 697 25.6.1 使用Worker 697 25.6.2 Worker全局作用域 698 25.6.3 包含其他腳本 699 25.6.4 Web Workers的未來(lái) 700 25.7 小結(jié) 700 附錄A ECMAScript Harmony 701 附錄B 嚴(yán)格模式 717 附錄C java script庫(kù) 723 附錄D java script工具 727
|