內容簡介
全書從JavaScript 語言實現的各個組成部分——語言核心、DOM、BOM、事件模型講起,深入淺出地探討了面向對象編程、Ajax 與Comet 伺服器端通信,HTML5 表單、媒體、Canvas(包括WebGL)及Web Workers、地理定位、跨文檔傳遞訊息、客戶端存儲(包括IndexedDB)等新API,還介紹了離線套用和與維護、性能、部署相關的最佳開發實踐。本書附錄展望了未來的API 和ECMAScript Harmony 規範。
作者簡介
Nicholas C.Zakas世界知名的JavaScript專家和Web開發人員。Nicholas擁有豐富的Web開發和界面設計經驗,曾經參與許多世界大公司的Web解決方案開發,並與他人合作撰寫了暢銷書《Ajax高級程式設計》。
章節目錄
第1章 JavaScript簡介 1
1.1 JavaScript簡史 1
1.2 JavaScript實現 2
1.2.1 ECMAScript 3
1.2.2 文檔對象模型(DOM) 5
1.2.3 瀏覽器對象模型(BOM) 8
1.3 JavaScript版本 8
1.4 小結 9
第2章 在HTML中使用JavaScript 10
2.1 元素 10
2.1.1 標籤的位置 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 元素 18
2.5 小結 18
第3章 基本概念 19
3.1 語法 19
3.1.1 區分大小寫 19
3.1.2 標識符 19
3.1.3 注釋 20
3.1.4 嚴格模式 20
3.1.5 語句 20
3.2 關鍵字和保留字 21
3.3 變數 22
3.4 數據類型 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 關係操作符 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 函式 62
3.7.1 理解參數 64
3.7.2 沒有重載 66
3.8 小結 67
第4章 變數、作用域和記憶體問題 68
4.1 基本類型和引用類型的值 68
4.1.1 動態的屬性 68
4.1.2 複製變數值 69
4.1.3 傳遞參數 70
4.1.4 檢測類型 72
4.2 執行環境及作用域 73
4.2.1 延長作用域鏈 75
4.2.2 沒有塊級作用域 76
4.3 垃圾收集 78
4.3.1 標記清除 78
4.3.2 引用計數 79
4.3.3 性能問題 80
4.3.4 管理記憶體 81
4.4 小結 81
第5章 引用類型 83
5.1 Object類型 83
5.2 Array類型 86
5.2.1 檢測數組 88
5.2.2 轉換方法 89
5.2.3 棧方法 90
5.2.4 佇列方法 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 日期/時間組件方法 102
5.4 RegExp類型 103
5.4.1 RegExp實例屬性 105
5.4.2 RegExp實例方法 106
5.4.3 RegExp構造函式屬性 107
5.4.4 模式的局限性 109
5.5 Function類型 110
5.5.1 沒有重載(深入理解) 111
5.5.2 函式聲明與函式表達式 111
5.5.3 作為值的函式 112
5.5.4 函式內部屬性 113
5.5.5 函式屬性和方法 116
5.6 基本包裝類型 118
5.6.1 Boolean類型 120
5.6.2 Number類型 120
5.6.3 String類型 122
5.7 單體內置對象 130
5.7.1 Global對象 131
5.7.2 Math對象 134
5.8 小結 137
第6章 面向對象的程式設計 138
6.1 理解對象 138
6.1.1 屬性類型 139
6.1.2 定義多個屬性 142
6.1.3 讀取屬性的特性 143
6.2 創建對象 144
6.2.1 工廠模式 144
6.2.2 構造函式模式 144
6.2.3 原型模式 147
6.2.4 組合使用構造函式模式和原型模式 159
6.2.5 動態原型模式 159
6.2.6 寄生構造函式模式 160
6.2.7 穩妥構造函式模式 161
6.3 繼承 162
6.3.1 原型鏈 162
6.3.2 借用構造函式 167
6.3.3 組合繼承 168
6.3.4 原型式繼承 169
6.3.5 寄生式繼承 171
6.3.6 寄生組合式繼承 172
6.4 小結 174
第7章 函式表達式 175
7.1 遞歸 177
7.2 閉包 178
7.2.1 閉包與變數 181
7.2.2 關於this對象 182
7.2.3 記憶體泄漏 183
7.3 模仿塊級作用域 184
7.4 私有變數 186
7.4.1 靜態私有變數 188
7.4.2 模組模式 189
7.4.3 增強的模組模式 191
7.5 小結 192
第8章 BOM 193
8.1 window對象 193
8.1.1 全局作用域 193
8.1.2 視窗關係及框架 194
8.1.3 視窗位置 197
8.1.4 視窗大小 198
8.1.5 導航和打開視窗 199
8.1.6 間歇調用和逾時調用 203
8.1.7 系統對話框 205
8.2 location對象 207
8.2.1 查詢字元串參數 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 小結 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 用戶代理字元串檢測技術 228
9.3.3 完整的代碼 242
9.3.4 使用方法 245
9.4 小結 246
第10章 DOM 247
10.1 節點層次 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操作技術 277
10.2.1 動態腳本 277
10.2.2 動態樣式 279
10.2.3 操作表格 281
10.2.4 使用NodeList 283
10.3 小結 284
第11章 DOM擴展 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 與類相關的擴充 289
11.3.2 焦點管理 291
11.3.3 HTMLDocument的變化 292
11.3.4 字元集屬性 293
11.3.5 自定義數據屬性 293
11.3.6 插入標記 294
11.3.7 scrollIntoView()方法 298
11.4 專有擴展 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 小結 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 小結 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 焦點事件 367
13.4.3 滑鼠與滾輪事件 368
13.4.4 鍵盤與文本事件 379
13.4.5 複合事件 384
13.4.6 變動事件 385
13.4.7 HTML5事件 388
13.4.8 設備事件 395
13.4.9 觸摸與手勢事件 399
13.5 記憶體和性能 402
13.5.1 事件委託 402
13.5.2 移除事件處理程式 404
13.6 模擬事件 405
13.6.1 DOM中的事件模擬 405
13.6.2 IE中的事件模擬 410
13.7 小結 411
第14章 表單腳本 412
14.1 表單的基礎知識 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 自動切換焦點 426
14.2.4 HTML5約束驗證API 427
14.3 選擇框腳本 431
14.3.1 選擇選項 432
14.3.2 添加選項 434
14.3.3 移除選項 435
14.3.4 移動和重排選項 435
14.4 表單序列化 436
14.5 富文本編輯 438
14.5.1 使用contenteditable
屬性 438
14.5.2 操作富文本 439
14.5.3 富文本選區 441
14.5.4 表單與富文本 443
14.6 小結 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 使用圖像數據 460
15.2.11 合成 462
15.3 WebGL 463
15.3.1 類型化數組 463
15.3.2 WebGL上下文 468
15.3.3 支持 478
15.4 小結 478
第16章 HTML5腳本編程 480
16.1 跨文檔訊息傳遞 480
16.2 原生拖放 481
16.2.1 拖放事件 482
16.2.2 自定義放置目標 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 歷史狀態管理 491
16.5 小結 492
第17章 錯誤處理與調試 493
17.1 瀏覽器報告的錯誤 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 錯誤處理 499
17.2.1 try-catch語句 500
17.2.2 拋出錯誤 503
17.2.3 錯誤(error)事件 505
17.2.4 處理錯誤的策略 506
17.2.5 常見的錯誤類型 507
17.2.6 區分致命錯誤和非致命
錯誤 510
17.2.7 把錯誤記錄到伺服器 511
17.3 調試技術 512
17.3.1 將訊息記錄到控制台 512
17.3.2 將訊息記錄到當前頁面 515
17.3.3 拋出錯誤 515
17.4 常見的IE錯誤 516
17.4.1 操作終止 516
17.4.2 無效字元 518
17.4.3 未找到成員 518
17.4.4 未知運行時錯誤 519
17.4.5 語法錯誤 519
17.4.6 系統無法找到指定資源 519
17.5 小結 520
第18章 JavaScript與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 小結 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 其他節點類型 552
19.2.3 查詢 553
19.2.4 構建和操作XML 555
19.2.5 解析和序列化 557
19.2.6 命名空間 558
19.3 其他變化 559
19.4 全面啟用E4X 560
19.5 小結 561
第20章 JSON 562
20.1 語法 562
20.1.1 簡單值 562
20.1.2 對象 563
20.1.3 數組 564
20.2 解析與序列化 565
20.2.1 JSON對象 565
20.2.2 序列化選項 566
20.2.3 解析選項 569
20.3 小結 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 逾時設定 579
21.2.3 overrideMimeType()
方法 580
21.3 進度事件 580
21.3.1 load事件 580
21.3.2 progress事件 581
21.4 跨源資源共享 582
21.4.1 IE對CORS的實現 582
21.4.2 其他瀏覽器對CORS的
實現 584
21.4.3 Preflighted Reqeusts 584
21.4.4 帶憑據的請求 585
21.4.5 跨瀏覽器的CORS 585
21.5 其他跨域技術 586
21.5.1 圖像Ping 586
21.5.2 JSONP 587
21.5.3 Comet 588
21.5.4 伺服器傳送事件 590
21.5.5 Web Sockets 591
21.5.6 SSE與Web Sockets 593
21.6 安全 593
21.7 小結 594
第22章 高級技巧 596
22.1 高級函式 596
22.1.1 安全的類型檢測 596
22.1.2 作用域安全的構造函式 597
22.1.3 惰性載入函式 600
22.1.4 函式綁定 602
22.1.5 函式柯里化 604
22.2 防篡改對象 606
22.2.1 不可擴展對象 606
22.2.2 密封的對象 607
22.2.3 凍結的對象 608
22.3 高級定時器 609
22.3.1 重複的定時器 610
22.3.2 Yielding Processes 612
22.3.3 函式節流 614
22.4 自定義事件 616
22.5 拖放 618
22.5.1 修繕拖動功能 620
22.5.2 添加自定義事件 622
22.6 小結 624
第23章 離線套用與客戶端存儲 626
23.1 離線檢測 626
23.2 套用快取 627
23.3 數據存儲 628
23.3.1 Cookie 629
23.3.2 IE用戶數據 637
23.3.3 Web存儲機制 638
23.3.4 IndexedDB 643
23.4 小結 654
第24章 最佳實踐 656
24.1 可維護性 656
24.1.1 什麼是可維護的代碼 656
24.1.2 代碼約定 657
24.1.3 鬆散耦合 659
24.1.4 編程實踐 662
24.2 性能 666
24.2.1 注意作用域 666
24.2.2 選擇正確方法 667
24.2.3 最小化語句數 672
24.2.4 最佳化DOM互動 673
24.3 部署 676
24.3.1 構建過程 676
24.3.2 驗證 677
24.3.3 壓縮 679
24.4 小結 681
第25章 新興的API 682
25.1 requestAnimationFrame() 682
25.1.1 早期動畫循環 682
25.1.2 循環間隔的問題 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 讀取部分內容 692
25.4.3 對象URL 693
25.4.4 讀取拖放的檔案 694
25.4.5 使用XHR上傳檔案 695
25.5 Web計時 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 小結 700
附錄A ECMAScript Harmony 701
附錄B 嚴格模式 717
附錄C JavaScript庫 723
附錄D JavaScript工具 727