第1部分 JavaScript概要 001
第1章 JavaScript概要 002
1.1 JavaScript概要 002
1.2 JavaScript的曆史 002
1.3 ECMAScript 003
1.3.1 JavaScript的標準化 003
1.3.2 被放棄的ECMAScript第4版 004
1.4 JavaScript的版本 004
1.5 JavaScript實現方式 005
1.6 JavaScript運行環境 006
1.6.1 核心語言 006
1.6.2 宿主對象 007
1.7 JavaScript相關環境 007
1.7.1 庫 007
1.7.2 源代碼壓縮 007
1.7.3 集成開發環境 008
第2部分 JavaScript的語言基礎 009
第2章 JavaScript基礎 010
2.1 JavaScript的特點 010
2.2 關於編排格式 011
2.3 變量的基礎 012
2.3.1 變量的使用方法 012
2.3.2 省略var 013
2.3.3 常量 013
2.4 函數基礎 013
2.4.1 函數的定義 013
2.4.2 函數的聲明與調用 014
2.4.3 匿名函數 014
2.4.4 函數是一種對象 015
2.5 對象的基礎 016
2.5.1 對象的定義 016
2.5.2 對象字麵量錶達式與對象的使用 016
2.5.3 屬性訪問 017
2.5.4 屬性訪問(括號方式) 017
2.5.5 方法 018
2.5.6 new錶達式 018
2.5.7 類與實例 018
2.5.8 對類的功能的整理 018
2.5.9 對象與類型 019
2.6 數組的基礎 019
第3章 JavaScript的數據類型 021
3.1 數據類型的定義 021
3.1.1 在數據類型方麵與Java作比較 021
3.1.2 基本數據類型和引用類型 022
3.2 內建數據類型概要 022
3.3 字符串型 023
3.3.1 字符串字麵量 023
3.3.2 字符串型的運算 024
3.3.3 字符串型的比較 024
3.3.4 字符串類(String類) 025
3.3.5 字符串對象 026
3.3.6 避免混用字符串值和字符串對象 027
3.3.7 調用String函數 027
3.3.8 String類的功能 027
3.3.9 非破壞性的方法 029
3.4 數值型 029
3.4.1 數值字麵量 029
3.4.2 數值型的運算 030
3.4.3 有關浮點數的常見注意事項 030
3.4.4 數值類(Number類) 031
3.4.5 調用Number函數 031
3.4.6 Number類的功能 032
3.4.7 邊界值與特殊數值 033
3.4.8 NaN 034
3.5 布爾型 035
3.5.1 布爾值 035
3.5.2 布爾類(Boolean類) 036
3.5.3 Boolean類的功能 036
3.6 null型 037
3.7 undefined型 037
3.8 Object類型 038
3.9 數據類型轉換 039
3.9.1 從字符串值轉換為數值 039
3.9.2 從數值轉換為字符串值 040
3.9.3 數據類型轉換的慣用方法 040
3.9.4 轉換為布爾型 041
3.9.5 其他的數據類型轉換 042
3.9.6 從Object類型轉換為基本數據類型 042
3.9.7 從基本數據類型轉換為Object類型 043
第4章 語句、錶達式和運算符 045
4.1 錶達式和語句的構成 045
4.2 保留字 045
4.3 標識符 046
4.4 字麵量 047
4.5 語句 047
4.6 代碼塊(復閤語句) 048
4.7 變量聲明語句 048
4.8 函數聲明語句 048
4.9 錶達式語句 048
4.10 空語句 049
4.11 控製語句 049
4.12 if-else語句 050
4.13 switch-case語句 052
4.14 循環語句 054
4.15 while語句 055
4.16 do-while語句 056
4.17 for語句 057
4.18 for in語句 058
4.18.1 數列與for in語句 059
4.18.2 在使用for in語句時需要注意的地方 060
4.19 for each in語句 060
4.20 break語句 061
4.21 continue語句 061
4.22 通過標簽跳轉 062
4.23 return語句 063
4.24 異常 063
4.25 其他 064
4.26 注釋 065
4.27 錶達式 065
4.28 運算符 065
4.29 錶達式求值 066
4.30 運算符的優先級以及結閤律 066
4.31 算術運算符 067
4.32 字符串連接運算符 068
4.33 相等運算符 068
4.34 比較運算符 069
4.35 in運算符 070
4.36 instanceof運算符 071
4.37 邏輯運算符 071
4.38 位運算符 072
4.39 賦值運算符 072
4.40 算術賦值運算符 073
4.41 條件運算符(三目運算符) 073
4.42 typeof運算符 073
4.43 new運算符 074
4.44 delete運算符 074
4.45 void運算符 074
4.46 逗號(,)運算符 074
4.47 點運算符和中括號運算符 075
4.48 函數調用運算符 075
4.49 運算符使用以及數據類型轉換中需要注意的地方075
第5章 變量與對象 076
5.1 變量的聲明 076
5.2 變量與引用 076
5.2.1 函數的參數(值的傳遞) 078
5.2.2 字符串與引用 079
5.2.3 對象與引用相關的術語總結 079
5.3 變量與屬性 080
5.4 變量的查找 081
5.5 對變量是否存在的檢驗 081
5.6 對象的定義 082
5.6.1 抽象數據類型與麵嚮對象 082
5.6.2 實例間的協作關係與麵嚮對象 083
5.6.3 JavaScript的對象 083
5.7 對象的生成 083
5.7.1 對象字麵量 083
5.7.2 構造函數與new錶達式 085
5.7.3 構造函數與類的定義 087
5.8 屬性的訪問 087
5.8.1 屬性值的更新 088
5.8.2 點運算符與中括號運算符在使用上的區彆 088
5.8.3 屬性的枚舉 089
5.9 作為關聯數組的對象 089
5.9.1 關聯數組 089
5.9.2 作為關聯數組的對象的注意點 090
5.10 屬性的屬性 091
5.11 垃圾迴收 092
5.12 不可變對象 092
5.12.1 不可變對象的定義 092
5.12.2 不可變對象的作用 092
5.12.3 實現不可變對象的方式 093
5.13 方法 094
5.14 this引用 094
5.14.1 this引用的規則 094
5.14.2 this引用的注意點 095
5.15 apply與call 096
5.16 原型繼承 097
5.16.1 原型鏈 097
5.16.2 原型鏈的具體示例 099
5.16.3 原型繼承與類 100
5.16.4 對於原型鏈的常見誤解以及_proto_屬性 100
5.16.5 原型對象 101
5.16.6 ECMAScript第5版與原型對象 101
5.17 對象與數據類型 102
5.17.1 數據類型判定(constructor屬性) 102
5.17.2 constructor屬性的注意點 102
5.17.3 數據類型判定(instance運算與isPrototypeOf方法) 103
5.17.4 數據類型判定(鴨子類型) 103
5.17.5 屬性的枚舉(原型繼承的相關問題) 104
5.18 ECMAScript第5版中的Object類 105
5.18.1 屬性對象 105
5.18.2 訪問器的屬性 106
5.19 標準對象 108
5.20 Object類 108
5.21 全局對象 110
5.21.1 全局對象與全局變量 110
5.21.2 Math對象 111
5.21.3 Error對象 112
第6章 函數與閉包 113
6.1 函數聲明語句與匿名函數錶達式 113
6.2 函數調用的分類 113
6.3 參數與局部變量 114
6.3.1 arguments對象 114
6.3.2 遞歸函數 114
6.4 作用域 115
6.4.1 瀏覽器與作用域 116
6.4.2 塊級作用域 116
6.4.3 let與塊級作用域 117
6.4.4 嵌套函數與作用域 119
6.4.5 變量隱藏 119
6.5 函數是一種對象 120
6.6 Function類 122
6.7 嵌套函數聲明與閉包 123
6.7.1 對閉包的初步認識 123
6.7.2 閉包的原理 123
6.7.3 閉包中需要注意的地方 126
6.7.4 防範命名空間的汙染 127
6.7.5 閉包與類 129
6.8 迴調函數設計模式 130
6.8.1 迴調函數與控製反轉 130
6.8.2 JavaScript與迴調函數 131
第7章 數據處理 134
7.1 數組 134
7.1.1 JavaScript的數組 134
7.1.2 數組元素的訪問 135
7.1.3 數組的長度 136
7.1.4 數組元素的枚舉 136
7.1.5 多維數組 137
7.1.6 數組是一種對象 138
7.1.7 Array類 139
7.1.8 數組對象的意義 140
7.1.9 數組的習慣用法 141
7.1.10 數組的內部實現 144
7.1.11 數組風格的對象 145
7.1.12 迭代器 145
7.1.13 生成器 147
7.1.14 數組的內包 149
7.2 JSON 149
7.2.1 JSON字符串 149
7.2.2 JSON對象 150
7.3 日期處理 151
7.4 正則錶達式 153
7.4.1 正則錶達式的定義 153
7.4.2 正則錶達式相關的術語 154
7.4.3 正則錶達式的語法 154
7.4.4 JavaScript中的正則錶達式156
7.4.5 正則錶達式程序設計 157
7.4.6 字符串對象與正則錶達式對象 158
第3部分 客戶端JavaScript 161
第8章 客戶端JavaScript與HTML 162
8.1 客戶端JavaScript的重要性 162
8.1.1 Web應用程序的發展 162
8.1.2 JavaScript的性能提升 162
8.1.3 JavaScript的作用 163
8.2 HTML與JavaScript 163
8.2.1 網頁顯示過程中的處理流程 163
8.2.2 JavaScript的錶述方式及其執行流程 163
8.2.3 執行流程的小結 166
8.3 運行環境與開發環境 166
8.3.1 運行環境 166
8.3.2 開發環境 166
8.4 調試 167
8.4.1 alert 167
8.4.2 console 167
8.4.3 onerror 169
8.4.4 Firebug, Web Inspector (Developer Tools), Opera Dragonfly 169
8.5 跨瀏覽器支持 171
8.5.1 應當提供支持的瀏覽器 171
8.5.2 實現方法 172
8.6 Window對象 174
8.6.1 Navigator對象 174
8.6.2 Location對象 174
8.6.3 History對象 175
8.6.4 Screen對象 176
8.6.5 對Window對象的引用 176
8.6.6 Document對象 176
第9章 DOM 177
9.1 DOM的定義 177
9.1.1 DOM Level 1 177
9.1.2 DOM Level 2 177
9.1.3 DOM Level 3 178
9.1.4 DOM的錶述方式 178
9.2 DOM的基礎 179
9.2.1 標簽、元素、節點 179
9.2.2 DOM操作 179
9.2.3 Document對象 179
9.3 節點的選擇 180
9.3.1 通過ID檢索 180
9.3.2 通過標簽名檢索 180
9.3.3 通過名稱檢索 184
9.3.4 通過類名檢索 184
9.3.5 父節點、子節點、兄弟節點 185
9.3.6 XPath 187
9.3.7 Selector API 189
9.4 節點的創建與新增 190
9.5 節點的內容更改 190
9.6 節點的刪除 190
9.7 innerHTML/textContent 190
9.7.1 innerHTML 190
9.7.2 textContent 191
9.8 DOM操作的性能 191
第10章 事件 192
10.1 事件驅動程序設計 192
10.2 事件處理程序/事件偵聽器的設定 192
10.2.1 指定為HTML元素的屬性193
10.2.2 指定為DOM元素的屬性 194
10.2.3 通過EventTarget.addEventListener()進行指定 194
10.2.4 事件處理程序/事件偵聽器內的this引用 196
10.3 事件的觸發 196
10.4 事件的傳播 196
10.4.1 捕獲階段 197
10.4.2 目標階段 197
10.4.3 事件冒泡階段 197
10.4.4 取消 197
10.5 事件所具有的元素 198
10.6 標準事件 199
10.6.1 DOM Level 2中所定義的事件 199
10.6.2 DOM Level 3中所定義的事件 200
10.7 自定義事件 202
第11章 客戶端JavaScript實踐 203
11.1 樣式 203
11.1.1 樣式的變更方法 203
11.1.2 位置的設定 207
11.1.3 位置 208
11.1.4 動畫 209
11.2 AJAX 210
11.2.1 異步處理的優點 210
11.2.2 XMLHttpRequest 210
11.2.3 基本的處理流程 210
11.2.4 同步通信 212
11.2.5 超時 212
11.2.6 響應 213
11.2.7 跨源限製 214
11.2.8 跨源通信 214
11.2.9 JSONP 214
11.2.10 iframe攻擊(iframe hack) 215
11.2.11 window.postMessage218
11.2.12 XMLHttpRequest Level 2 219
11.2.13 跨源通信的安全問題 219
11.3 錶單 219
11.3.1 錶單元素 219
11.3.2 錶單控件 221
11.3.3 內容驗證 221
11.3.4 可用於驗證的事件 222
11.3.5 使用錶單而不産生頁麵跳轉的方法 222
第12章 庫 224
12.1 使用庫的原因 224
12.2 jQuery的特徵 224
12.3 jQuery的基本概念 225
12.3.1 使用實例 225
12.3.2 鏈式語法 226
12.4 $函數 227
12.4.1 抽取與選擇器相匹配的元素 227
12.4.2 創建新的DOM元素 227
12.4.3 將已有的DOM元素轉換為jQuery對象 227
12.4.4 對DOM構造完成後的事件偵聽器進行設定 227
12.5 通過jQuery進行DOM操作 228
12.5.1 元素的選擇 228
12.5.2 元素的創建·添加·替換·刪除 230
12.6 通過jQuery處理事件 231
12.6.1 事件偵聽器的注冊·刪除 231
12.6.2 事件專用的事件偵聽器注冊方法 232
12.6.3 ready()方法 232
12.7 通過jQuery對樣式進行操作 233
12.7.1 基本的樣式操作 233
12.7.2 動畫 234
12.8 通過jQuery進行AJAX操作 235
12.8.1 AJAX()函數 235
12.8.2 AJAX()的包裝函數 236
12.8.3 全局事件 237
12.9 Deferred 237
12.9.1 Deferred的基本概念 237
12.9.2 狀態遷移 238
12.9.3 後續函數 239
12.9.4 並行處理 241
12.10 jQuery插件 241
12.10.1 使用jQuery插件 241
12.10.2 創建jQuery插件 242
12.11 與其他庫共同使用 243
12.11.1 $對象的衝突 243
12.11.2 避免$對象的衝突 243
12.12 庫的使用方法 244
第13章 HTML5概要 272
13.1 HTML5的曆史 246
13.2 HTML5的現狀 247
13.2.1 瀏覽器的支持情況 247
13.2.2 Web應用程序與原生應用程序 248
13.3 HTML5的概要 248
第14章 Web應用程序 250
14.1 History API 250
14.1.1 History API的定義 250
14.1.2 哈希片段 250
14.1.3 接口 251
14.2 ApplicationCache 255
14.2.1 關於緩存管理 255
14.2.2 緩存清單文件 255
14.2.3 ApplicationCache API 258
14.2.4 在綫與離綫 259
第15章 與桌麵應用的協作 260
15.1 Drag Drop API 260
15.1.1 Drag Drop API的定義260
HTML5 245
第4部分 HTML5 245
15.1.2 接口 261
15.1.3 基本的拖動與釋放 262
15.1.4 自定義顯示 263
15.1.5 文件的Drag-In/ Drag-Out 265
15.2 File API 267
15.2.1 File API的定義 267
15.2.2 File對象 267
15.2.3 FileReader 269
15.2.4 data URL 271
15.2.5 FileReaderSync 273
第16章 存儲 274
16.1 Web Storage 274
16.1.1 Web Storage的定義 274
16.1.2 基本操作 275
16.1.3 storage事件 277
16.1.4 關於Cookie 277
16.1.5 命名空間的管理 278
16.1.6 版本的管理 279
16.1.7 對localStorage的模擬279
16.2 Indexed Database 280
16.2.1 Indexed Database的定義 280
16.2.2 基礎架構 280
16.2.3 連接數據庫 281
16.2.4 對象存儲的創建 281
16.2.5 數據的添加·刪除·引用 282
16.2.6 索引的創建 283
16.2.7 數據的檢索與更新 284
16.2.8 數據的排序 285
16.2.9 事務 285
16.2.10 同步API 286
第17章 WebSocket 287
17.1 WebSocket概要 287
17.1.1 WebSocket的定義 287
17.1.2 現有的通信技術 287
17.1.3 WebSocket的標準 290
17.1.4 WebSocket的執行方式 290
17.2 基本操作 291
17.2.1 連接的建立 291
17.2.2 消息的收發 291
17.2.3 連接的切斷 292
17.2.4 連接的狀態確認 292
17.2.5 二進製數據的收發 293
17.2.6 WebSocket實例的屬性一覽 293
17.3 WebSocket實踐 294
17.3.1 Node.js的安裝 294
17.3.2 服務器端的實現 295
17.3.3 客戶端的實現 295
17.3.4 客戶端的實現2 296
第18章 Web Workers 298
18.1 Web Workers概要 298
18.1.1 Web Workers的定義 298
18.1.2 Web Workers的執行方式 298
18.2 基本操作 299
18.2.1 工作綫程的創建 299
18.2.2 主綫程一側的消息收發 299
18.2.3 工作綫程一側的消息收發 300
18.2.4 工作綫程的刪除 300
18.2.5 外部文件的讀取 301
18.3 Web Worker實踐 301
18.3.1 工作綫程的使用 301
18.3.2 中斷對工作綫程的處理 302
18.4 共享工作綫程 304
18.4.1 共享工作綫程的定義 304
18.4.2 共享工作綫程的創建 304
18.4.3 共享工作綫程的消息收發 305
18.4.4 共享工作綫程的刪除 306
18.4.5 共享工作綫程的應用實例 306
第5部分 Web API 309
第19章 Web API的基礎 310
19.1 Web API與Web服務 310
19.2 Web API的曆史 311
19.2.1 Web抓取 311
19.2.2 語義網 311
19.2.3 XML 311
19.2.4 Atom 312
19.2.5 JSON 312
19.2.6 SOAP 313
19.2.7 REST 313
19.2.8 簡單總結 313
19.3 Web API的組成 314
19.3.1 Web API的形式 314
19.3.2 Web API的使用 315
19.3.3 RESTful API 315
19.3.4 API密鑰 316
19.4 用戶驗證與授權 317
19.4.1 Web應用程序的會話管理 317
19.4.2 會話管理與用戶驗證 318
19.4.3 Web API與權限 319
19.4.4 驗證與授權 320
19.4.5 OAuth 321
第20章 Web API的實例 323
20.1 Web API的分類 323
20.2 Google Translate API 324
20.2.1 準備 325
20.2.2 執行方式的概要 325
20.2.3 使用瞭Web API的代碼示例 326
20.2.4 微件(Google Translate Element) 327
20.3 Google Maps API 328
20.3.1 Google Static Maps API 328
20.3.2 我的地圖 329
20.3.3 Google Maps API的概要 330
20.3.4 簡單的Google Maps API示例 330
20.3.5 事件 331
20.3.6 Geolocation API與Geocoding API 333
20.4 Yahoo! Flickr 334
20.4.1 Flickr Web API的使用 335
20.4.2 Flickr Web API的使用實例 336
20.5 Twitter 337
20.5.1 搜索API 337
20.5.2 REST API 338
20.5.3 Twitter JS API @anywhere 339
20.5.4 Twitter Widget 341
20.6 Facebook 341
20.6.1 Facebook應用的發展曆程 341
20.6.2 Facebook的JavaScript API 343
20.6.3 Facebook的插件 344
20.7 OpenSocial 345
第6部分 服務器端 JavaScript 351
第21章 服務器端JavaScript與Node.js 352
21.1 服務器端JavaScript的動嚮 352
21.2 CommonJS 352
21.2.1 CommonJS的定義 352
21.2.2 CommonJS的動嚮 353
21.2.3 模塊功能 353
21.3 Node.js 355
21.3.1 Node.js概要 355
21.3.2 node指令 359
21.3.3 npm與包 359
21.3.4 console模塊 360
21.3.5 util模塊 361
21.3.6 process對象 362
21.3.7 全局對象 363
21.3.8 Node.js程序設計概要 363
21.3.9 事件API 365
21.3.10 緩衝 369
21.3.11 流 372
第22章 Node.js程序設計實踐 374
22.1 HTTP服務器處理 374
22.1.1 HTTP服務器處理的基本流程 374
22.1.2 請求處理 375
22.1.3 響應處理 376
22.1.4 POST請求處理 377
22.2 HTTP客戶端處理 378
22.3 HTTPS處理 379
22.3.1 通過openssl指令發布自簽名證書的方法 379
22.3.2 HTTPS服務器 379
22.4 Socket.IO與WebSocket 380
22.5 下層網絡程序設計 381
22.5.1 下層網絡處理 381
22.5.2 套接字的定義 382
22.5.3 套接字程序設計的基本結構 382
22.5.4 套接字程序設計的具體實例 384
22.6 文件處理 385
22.6.1 本節的範例代碼 385
22.6.2 文件的異步處理 386
22.6.3 文件的同步處理 386
22.6.4 文件操作相關函數 387
22.6.5 文件讀取 387
22.6.6 文件寫入 388
22.6.7 目錄操作 389
22.6.8 對文件更改的監視 390
22.6.9 文件路徑 390
22.7 定時器 390
22.8 Express 391
22.8.1 URL路由 392
22.8.2 請求處理 392
22.8.3 響應處理 393
22.8.4 scaffold創建功能 393
22.8.5 MVC架構 393
22.8.6 模闆語言Jade 394
22.8.7 MongoDB(數據庫) 395
22.8.8 Mongoose的實例 397
22.8.9 使用瞭Express與Mongoose的Web應用程序 398
後記 401
索引 403
· · · · · · (
收起)