第1 章 計算的概念 1
1.1 計算是一門自然科學 1
1.2 計算的五大學科 2
1.2.1 計算機科學 2
1.2.2 軟件工程 2
1.2.3 計算機工程 2
1.2.4 信息技術 3
1.2.5 信息系統 3
1.3 與計算相關的職業 3
1.4 關于計算的誤解 4
1.5 本章小結 5
1.6 練習 5
第2 章 編程 7
2.1 學習編程 7
2.2 基本概念 7
2.2.1 瀏覽器地址欄 8
2.2.2 運行器頁面 8
2.2.3 交互式命令行 10
2.2.4 文件 12
2.3 程序的構成 16
2.3.1 表達式 16
2.3.2 變量 17
2.3.3 語句 20
2.4 編程慣例 21
2.4.1 注釋 21
2.4.2 編碼約定 22
2.4.3 代碼質量檢查工具 23
2.5 JavaScript編程語言 24
2.6 本章小結 24
2.7 練習 25
第3 章 數據 28
3.1 數據類型 28
3.2 真值 28
3.3 數值 29
3.3.1 數值運算 30
3.3.2 大小和精度的限制 30
3.3.3 NaN 31
3.3.4 十六進制數值 31
3.4 文本 32
3.4.1 字符、符號與字符集 32
3.4.2 字符串操作 35
3.5 undefined與null 36
3.6 對象 37
3.6.1 對象基礎 37
3.6.2 理解對象引用 38
3.6.3 對象原型 40
3.6.4 自引用對象 41
3.7 數組 41
3.8 類型轉換 44
3.8.1 弱類型 44
3.8.2 顯式轉換 45
3.8.3 松散相等操作符 47
3.9 typeof操作符* 47
3.10 本章小結 48
3.11 練習 48
第4 章 語句 52
4.1 聲明語句 52
4.2 表達式語句 52
4.3 條件執行 54
4.3.1 if語句 54
4.3.2 條件表達式 56
4.3.3 switch語句 56
4.3.4 用查詢避免條件代碼 58
4.3.5 短路執行 61
4.4 迭代 62
4.4.1 while和do-while語句 62
4.4.2 for語句 63
4.4.3 for-in語句 67
4.5 中斷 68
4.5.1 break和continue 69
4.5.2 異常 70
4.6 應該避免的編碼風格 72
4.6.1 不分塊的復合語句 72
4.6.2 隱式分號 73
4.6.3 隱式聲明 74
4.6.4 遞增和遞減運算符 74
4.6.5 with語句 74
4.7 本章小結 74
4.8 練習 75
第5 章 函數 78
5.1 黑盒 78
5.2 定義和調用函數 78
5.3 示例 80
5.3.1 簡單的一行函數 80
5.3.2 驗證實參 81
5.3.3 將對象引用作為參數傳送 82
5.3.4 先決條件 83
5.3.5 關注點的分離 85
5.3.6 斐波那契數列 86
5.4 作用域 87
5.5 作為對象的函數 89
5.5.1 函數的屬性 89
5.5.2 作為屬性的函數 89
5.5.3 構造器 90
5.6 上下文 95
5.7 高階函數 96
5.8 函數聲明與函數表達式* 98
5.9 本章小結 99
5.10 練習 100
第6 章 事件 105
6.1 用戶互動 105
6.1.1 程序設計范例轉移 105
6.1.2 事件舉例:溫度轉換Web頁面 106
6.2 定義用戶界面元素 107
6.2.1 Web頁面是結構化文檔 108
6.2.2 生成用戶界面控件的元素 109
6.3 以編程方式訪問用戶界面元素 112
6.3.1 document對象 112
6.3.2 DOM屬性的樂趣 114
6.3.3 一個“玩耍”的地方 115
6.3.4 操控用戶界面控件 116
6.3.5 遍歷DOM* 118
6.4 事件處理程序 122
6.4.1 事件處理程序的骨架 122
6.4.2 事件處理程序是函數,是對象 123
6.5 事件對象 125
6.6 事件實現細節 126
6.6.1 事件捕獲與冒泡 126
6.6.2 默認操作 127
6.6.3 指定事件處理程序 129
6.6.4 時間流逝觸發的事件 130
6.6.5 多點觸摸、手勢和物理事件 131
6.7 案例研究:井字棋 135
6.7.1 文件與連接 135
6.7.2 初始化 137
6.7.3 事件處理 139
6.7.4 業務邏輯 139
6.8 本章小結 140
6.9 練習 140
第7 章 軟件構架 146
7.1 軟件工程活動 146
7.2 面向對象的設計與編程 146
7.2.1 對象族 147
7.2.2 繼承 149
7.2.3 信息隱藏 153
7.2.4 屬性描述符* 155
7.3 JavaScript標準對象 157
7.3.1 內置對象 157
7.3.2 Web瀏覽器宿主對象 166
7.4 模塊 166
7.4.1 簡單模塊 167
7.4.2 作為模塊的井字棋游戲 168
7.5 jQuery JavaScript庫 171
7.6 性能 175
7.6.1 運行時效率 175
7.6.2 空間效率 177
7.6.3 加載時間效率 178
7.6.4 用戶界面效率 179
7.7 單元測試 181
7.7.1 一個簡單的例子 182
7.7.2 QUnit測試框架 183
7.7.3 軟件開發過程中的測試 186
7.8 本章小結 187
7.9 練習 187
第8 章 分布式計算 193
8.1 分布式計算模型 193
8.2 數據交互格式 194
8.2.1 純文本 194
8.2.2 XML 195
8.2.3 JSON 198
8.2.4 YAML 200
8.3 同步通信與異步通信 201
8.4 Ajax 202
8.4.1 jQuery中的Ajax 202
8.4.2 沒有庫的Ajax 206
8.5 設計分布式應用程序 208
8.5.1 統一資源標識符 208
8.5.2 REST 211
8.5.3 分布式應用程序關注點的分離 213
8.5.4 服務器端技術* 216
8.6 安全性 217
8.6.1 Web、不利因素和沙盒 217
8.6.2 同源策略 218
8.6.3 跨站腳本 222
8.6.4 mashup 224
8.7 案例研究:事件與趨勢主題 225
8.7.1 日期選擇用戶界面 229
8.7.2 Ajax連接 230
8.7.3 結果處理 232
8.7.4 數據(mashup)顯示 234
8.8 本章小結 235
8.9 練習 236
第9 章 圖形與動畫 246
9.1 基礎知識 246
9.1.1 坐標空間 246
9.1.2 色彩 247
9.1.3 像素與對象/矢量 248
9.1.4 動畫 250
9.2 HTML和CSS 250
9.2.1 圖形的HTML元素 250
9.2.2 CSS 251
9.2.3 可視屬性 254
9.2.4 絕對位置 257
9.2.5 案例研究:條形圖 258
9.2.6 案例研究:漢諾塔顯示 259
9.3 HTML和CSS中的動畫 262
9.3.1 恒定速度 262
9.3.2 淡入與淡出 263
9.3.3 實現其他屬性的動畫 264
9.3.4 緩動動畫 264
9.3.5 聲明性CSS動畫 265
9.4 canvas元素 266
9.4.1 實例化canvas 266
9.4.2 渲染上下文 266
9.4.3 繪制矩形 267
9.4.4 繪制直線和多邊形 268
9.4.5 繪制弧和圓 269
9.4.6 繪制貝塞爾曲線和二次曲線 270
9.4.7 處理圖像 271
9.4.8 變換 274
9.4.9 動畫 278
9.4.10 canvas舉例 280
9.5 SVG 283
9.5.1 在Web瀏覽器中查看SVG 284
9.5.2 SVG案例研究:一個貝塞爾曲線編輯器 286
9.5.3 繪畫中的對象 287
9.5.4 讀寫屬性 287
9.5.5 交互性(事件處理歸來) 290
9.5.6 其他SVG功能 291
9.6 用WebGL實現3D圖形 292
9.6.1 WebGL是3D canvas 292
9.6.2 案例研究:謝爾賓斯基三角 293
9.6.3 定義3D數據 295
9.6.4 著色器代碼 295
9.6.5 繪制場景 296
9.6.6 交互性與事件 297
9.7 其他客戶端圖形技術 299
9.7.1 Flash 299
9.7.2 Java 299
9.7.3 VML 300
9.8 本章小結 300
9.9 練習 300
第10 章 高級主題 310
10.1 正則表達式 310
10.1.1 正則表達式簡介 310
10.1.2 捕獲 311
10.1.3 數量詞 312
10.1.4 向后引用 313
10.1.5 正則表達式修飾符 313
10.1.6 RegExp構造器 314
10.1.7 正則表達式的更多內容 314
10.2 遞歸 314
10.2.1 什么是遞歸 315
10.2.2 遞歸經典示例 316
10.2.3 遞歸與家族樹 322
10.2.4 什么時候不用遞歸 324
10.3 緩存 325
10.4 MapReduce 327
10.4.1 使用map、filter和reduce 327
10.4.2 實現 329
10.4.3 大規模數據處理中的MapReduce 330
10.5 動態創建事件處理程序 330
10.6 本章小結 333
10.7 練習 333
附錄A JavaScript 語言參考 337
附錄B 數值編碼 352
附錄C Unicode 355
術語表 363
參考文獻 366
本書旨在通過從零開始介紹JavaScript 編程讓讀者理解計算機科學的基本思想和原理。書中內容豐富全面,闡述由淺入深。主要內容有:計算的相關知識、編程的基本概念、數據、語句、函數、事件、軟件架構、分布式計算、圖形與動畫,此外還探討了正則表達式、遞歸、緩存等高級主題。