本書是java script 超級暢銷書的最新版。ECMAScript 5 和HTML5 在標(biāo)準(zhǔn)之爭中雙雙勝出,使大量專有實(shí)現(xiàn)和客戶端擴(kuò)展正式進(jìn)入規(guī)范,同時(shí)也為java script 增添了很多適應(yīng)未來發(fā)展的新特性。本書這一版除增加5 章全新內(nèi)容外,其他章節(jié)也有較大幅度的增補(bǔ)和修訂,新內(nèi)容篇幅約占三分之一。全書從java script 語言實(shí)現(xiàn)的各個(gè)組成部分——語言核心、DOM、BOM、事件模型講起,深入淺出地探討了面向?qū)ο缶幊、Ajax 與Comet 服務(wù)器端通信,HTML5 表單、媒體、Canvas(包括WebGL)及Web Workers、地理定位、跨文檔傳遞消息、客戶端存儲(包括IndexedDB)等新API,還介紹了離線應(yīng)用和與維護(hù)、性能、部署相關(guān)的最佳開發(fā)實(shí)踐。本書附錄展望了未來的API 和ECMAScript Harmony 規(guī)范。 本書適合有一定編程經(jīng)驗(yàn)的Web 應(yīng)用開發(fā)人員閱讀,也可作為高校及社會實(shí)用技術(shù)培訓(xùn)相關(guān)專業(yè)課程的教材。 作者簡介
作者簡介: Nicholas C. Zakas(尼古拉斯?澤卡斯)世界頂級Web技術(shù)專家,現(xiàn)為雅虎公司界面呈現(xiàn)架構(gòu)師,負(fù)責(zé)My Yahoo!和雅虎首頁等大訪問量站點(diǎn)的設(shè)計(jì)。尼古拉斯擁有豐富的Web開發(fā)和界面設(shè)計(jì)經(jīng)驗(yàn),曾經(jīng)參與許多世界級大公司的Web解決方案開發(fā)。他還是High Performance java script一書的作者,并與他人合作撰寫了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簡介 1 1.1 java script簡史 1 1.2 java script實(shí)現(xiàn) 2 1.2.1 ECMAScript 3 1.2.2 文檔對象模型(DOM) 5 1.2.3 瀏覽器對象模型(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 不推薦使用的語法 16 2.2 嵌入代碼與外部文件 16 2.3 文檔模式 16 2.4 <noscript>元素 18 2.5 小結(jié) 18 第3章 基本概念 19 3.1 語法 19 3.1.1 區(qū)分大小寫 19 3.1.2 標(biāo)識符 19 3.1.3 注釋 20 3.1.4 嚴(yán)格模式 20 3.1.5 語句 20 3.2 關(guān)鍵字和保留字 21 3.3 變量 22 3.4 數(shù)據(jù)類型 23 3.4.1 typeof操作符 23 3.4.2 Undefined類型 24 3.4.3 Null類型 25 3.4.4 Boolean類型 26 3.4.5 Number類型 27 3.4.6 String類型 32 3.4.7 Object類型 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 逗號操作符 54 3.6 語句 54 3.6.1 if語句 54 3.6.2 do-while語句 55 3.6.3 while語句 55 3.6.4 for語句 56 3.6.5 for-in語句 57 3.6.6 label語句 58 3.6.7 break和continue語句 58 3.6.8 with語句 60 3.6.9 switch語句 60 3.7 函數(shù) 62 3.7.1 理解參數(shù) 64 3.7.2 沒有重載 66 3.8 小結(jié) 67 第4章 變量、作用域和內(nèi)存問題 68 4.1 基本類型和引用類型的值 68 4.1.1 動態(tài)的屬性 68 4.1.2 復(fù)制變量值 69 4.1.3 傳遞參數(shù) 70 4.1.4 檢測類型 72 4.2 執(zhí)行環(huán)境及作用域 73 4.2.1 延長作用域鏈 75 4.2.2 沒有塊級作用域 76 4.3 垃圾收集 78 4.3.1 標(biāo)記清除 78 4.3.2 引用計(jì)數(shù) 79 4.3.3 性能問題 80 4.3.4 管理內(nèi)存 81 4.4 小結(jié) 81 第5章 引用類型 83 5.1 Object類型 83 5.2 Array類型 86 5.2.1 檢測數(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類型 98 5.3.1 繼承的方法 100 5.3.2 日期格式化方法 101 5.3.3 日期/時(shí)間組件方法 102 5.4 RegExp類型 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類型 110 5.5.1 沒有重載(深入理解) 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 基本包裝類型 118 5.6.1 Boolean類型 120 5.6.2 Number類型 120 5.6.3 String類型 122 5.7 單體內(nèi)置對象 130 5.7.1 Global對象 131 5.7.2 Math對象 134 5.8 小結(jié) 137 第6章 面向?qū)ο蟮某绦蛟O(shè)計(jì) 138 6.1 理解對象 138 6.1.1 屬性類型 139 6.1.2 定義多個(gè)屬性 142 6.1.3 讀取屬性的特性 143 6.2 創(chuàng)建對象 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 動態(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對象 182 7.2.3 內(nèi)存泄漏 183 7.3 模仿塊級作用域 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對象 193 8.1.1 全局作用域 193 8.1.2 窗口關(guān)系及框架 194 8.1.3 窗口位置 197 8.1.4 窗口大小 198 8.1.5 導(dǎo)航和打開窗口 199 8.1.6 間歇調(diào)用和超時(shí)調(diào)用 203 8.1.7 系統(tǒng)對話框 205 8.2 location對象 207 8.2.1 查詢字符串參數(shù) 207 8.2.2 位置操作 208 8.3 navigator對象 210 8.3.1 檢測插件 211 8.3.2 注冊處理程序 213 8.4 screen對象 214 8.5 history對象 215 8.6 小結(jié) 216 第9章 客戶端檢測 217 9.1 能力檢測 217 9.1.1 更可靠的能力檢測 218 9.1.2 能力檢測,不是瀏覽器檢測 220 9.2 怪癖檢測 220 9.3 用戶代理檢測 221 9.3.1 用戶代理字符串的歷史 222 9.3.2 用戶代理字符串檢測技術(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類型 248 10.1.2 Document類型 253 10.1.3 Element類型 261 10.1.4 Text類型 270 10.1.5 Comment類型 273 10.1.6 CDATASection類型 274 10.1.7 DocumentType類型 274 10.1.8 DocumentFragment類型 275 10.1.9 Attr類型 276 10.2 DOM操作技術(shù) 277 10.2.1 動態(tài)腳本 277 10.2.2 動態(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 與類相關(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 專有擴(kuò)展 298 11.4.1 文檔模式 298 11.4.2 children屬性 299 11.4.3 contains()方法 300 11.4.4 插入文本 301 11.4.5 滾動 303 11.5 小結(jié) 304 第12章 DOM2和DOM3 305 12.1 DOM變化 305 12.1.1 針對XML命名空間的變化 306 12.1.2 其他方面的變化 309 12.2 樣式 312 12.2.1 訪問元素的樣式 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級事件處理程序 350 13.2.3 DOM2級事件處理程序 351 13.2.4 IE事件處理程序 352 13.2.5 跨瀏覽器的事件處理程序 353 13.3 事件對象 355 13.3.1 DOM中的事件對象 355 13.3.2 IE中的事件對象 358 13.3.3 跨瀏覽器的事件對象 360 13.4 事件類型 362 13.4.1 UI事件 362 13.4.2 焦點(diǎn)事件 367 13.4.3 鼠標(biāo)與滾輪事件 368 13.4.4 鍵盤與文本事件 379 13.4.5 復(fù)合事件 384 13.4.6 變動事件 385 13.4.7 HTML5事件 388 13.4.8 設(shè)備事件 395 13.4.9 觸摸與手勢事件 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ǔ)知識 412 14.1.1 提交表單 413 14.1.2 重置表單 414 14.1.3 表單字段 414 14.2 文本框腳本 419 14.2.1 選擇文本 420 14.2.2 過濾輸入 423 14.2.3 自動切換焦點(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 移動和重排選項(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 類型化數(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對象 483 16.2.4 dropEffect與effectAllowed 484 16.2.5 可拖動 485 16.2.6 其他成員 485 16.3 媒體元素 486 16.3.1 屬性 487 16.3.2 事件 488 16.3.3 自定義媒體播放器 488 16.3.4 檢測編解碼器的支持情況 489 16.3.5 Audio類型 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語句 500 17.2.2 拋出錯(cuò)誤 503 17.2.3 錯(cuò)誤(error)事件 505 17.2.4 處理錯(cuò)誤的策略 506 17.2.5 常見的錯(cuò)誤類型 507 17.2.6 區(qū)分致命錯(cuò)誤和非致命 錯(cuò)誤 510 17.2.7 把錯(cuò)誤記錄到服務(wù)器 511 17.3 調(diào)試技術(shù) 512 17.3.1 將消息記錄到控制臺 512 17.3.2 將消息記錄到當(dāng)前頁面 515 17.3.3 拋出錯(cuò)誤 515 17.4 常見的IE錯(cuò)誤 516 17.4.1 操作終止 516 17.4.2 無效字符 518 17.4.3 未找到成員 518 17.4.4 未知運(yùn)行時(shí)錯(cuò)誤 519 17.4.5 語法錯(cuò)誤 519 17.4.6 系統(tǒng)無法找到指定資源 519 17.5 小結(jié) 520 第18章 java script與XML 521 18.1 瀏覽器對XML DOM的支持 521 18.1.1 DOM2級核心 521 18.1.2 DOMParser類型 522 18.1.3 XMLSerializer類型 523 18.1.4 IE8及之前版本中的XML 523 18.1.5 跨瀏覽器處理XML 527 18.2 瀏覽器對XPath的支持 529 18.2.1 DOM3級XPath 529 18.2.2 IE中的XPath 534 18.2.3 跨瀏覽器使用XPath 535 18.3 瀏覽器對XSLT的支持 537 18.3.1 IE中的XSLT 537 18.3.2 XSLTProcessor類型 541 18.3.3 跨瀏覽器使用XSLT 543 18.4 小結(jié) 544 第19章 E4X 546 19.1 E4X的類型 546 19.1.1 XML類型 546 19.1.2 XMLList類型 547 19.1.3 Namespace類型 548 19.1.4 QName類型 549 19.2 一般用法 550 19.2.1 訪問特性 551 19.2.2 其他節(jié)點(diǎn)類型 552 19.2.3 查詢 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 語法 562 20.1.1 簡單值 562 20.1.2 對象 563 20.1.3 數(shù)組 564 20.2 解析與序列化 565 20.2.1 JSON對象 565 20.2.2 序列化選項(xiàng) 566 20.2.3 解析選項(xiàng) 569 20.3 小結(jié) 570 第21章 Ajax與Comet 571 21.1 XMLHttpRequest對象 571 21.1.1 XHR的用法 573 21.1.2 HTTP頭部信息 575 21.1.3 GET請求 576 21.1.4 POST請求 577 21.2 XMLHttpRequest 2級 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對CORS的實(shí)現(xiàn) 582 21.4.2 其他瀏覽器對CORS的 實(shí)現(xiàn) 584 21.4.3 Preflighted Reqeusts 584 21.4.4 帶憑據(jù)的請求 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章 高級技巧 596 22.1 高級函數(shù) 596 22.1.1 安全的類型檢測 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 防篡改對象 606 22.2.1 不可擴(kuò)展對象 606 22.2.2 密封的對象 607 22.2.3 凍結(jié)的對象 608 22.3 高級定時(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 修繕拖動功能 620 22.5.2 添加自定義事件 622 22.6 小結(jié) 624 第23章 離線應(yīng)用與客戶端存儲 626 23.1 離線檢測 626 23.2 應(yīng)用緩存 627 23.3 數(shù)據(jù)存儲 628 23.3.1 Cookie 629 23.3.2 IE用戶數(shù)據(jù) 637 23.3.3 Web存儲機(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 最小化語句數(shù) 672 24.2.4 優(yōu)化DOM交互 673 24.3 部署 676 24.3.1 構(gòu)建過程 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 早期動畫循環(huán) 682 25.1.2 循環(huá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類型 690 25.4.2 讀取部分內(nèi)容 692 25.4.3 對象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的未來 700 25.7 小結(jié) 700 附錄A ECMAScript Harmony 701 附錄B 嚴(yán)格模式 717 附錄C java script庫 723 附錄D java script工具 727
|