JavaScript 編程思想 : 從 ES5 到 ES9
內容描述
本書從基礎到高級,主要闡釋JavaScript編程各層面的語法、觀念、實戰示例與習題。其內容深入淺出,主要內容包括:表達式與運算符,數據類型,條件和循環語句,函數與方法,處理數值、字符串、數組、自定義對象與日期和時間,DOM的事件處理和元素實例,Reflect、Proxy和Intl對象,window.navigator、window.document和BOM的多個對象實例,類,錯誤處理,數據的驗證與傳輸,響應式機制與源代碼加密。 本書含有充足且具有創意的實戰示例,利於讀者學習、理解和實際運用。另外,各章末的習題也是用來演練學習成果的良方,可起到事半功倍的奇效。本書既適合業界的程序開發者閱讀,也可作為大中專院校與培訓機構的教學參考書。
目錄大綱
第1章 ECMAScript簡介 1
1.1 概述 1
1.1.1 ECMAScript各版本 1
1.1.2 關於JavaScript 2
1.1.3 其他腳本語言 2
1.2 語法的實現 2
1.2.1 源代碼 2
1.2.2 語句 3
1.2.3 表達式 5
1.2.4 子程序 10
1.2.5 註釋 11
1.2.6 關鍵字 11
1.3 開 發 環 境 12
1.3.1 瀏覽器 13
1.3.2 Node.js 14
1.3.3 其他JavaScript Shell 14
1.4 練習題 15
第2章 表達式與運算符 17
2.1 操作數 17
2.1.1 常量(ES6) 17
2.1.2 變量(ES6) 18
2.1.3 子表達式 23
2.1.4 函數的返回值 25
2.2 運算符 26
2.2.1 算術運算符(ES7) 27
2.2.2 賦值運算符 30
2.2.3 比較運算符 33
2.2.4 邏輯運算符 34
2.2.5 條件運算符 36
2.2.6 類型運算符 37
2.2.7 按位運算符 41
2.2.8 括號運算符 46
2.2.9 擴展運算符(ES6) 49
2.2.10 逗號運算符 51
2.2.11 刪除運算符 51
2.2.12 運算符的優先級(ES6) 53
2.3 練習題 55
第3章 數據類型 57
3.1 數值類型 57
3.1.1 2n進制的字面量(ES6) 57
3.1.2 數值的比較(ES6) 58
3.1.3 數值的正負符號(ES6) 59
3.1.4 數值的截斷(ES6) 60
3.1.5 數值的特殊格式(ECMA-402) 63
3.1.6 整數值的安全範圍(ES6) 66
3.2 布爾類型 68
3.3 數組類型 70
3.4 對象類型 73
3.5 字符串類型 75
3.5.1 一般字符串 75
3.5.2 格式化字符串(ES6) 77
3.5.3 日期與時間格式的字符串(ES6) 80
3.6 集合與地圖類型 82
3.6.1 集合類型(ES6) 82
3.6.2 地圖類型(ES6) 84
3.7 數據類型的轉換(ES6) 85
3.8 練習題 88
第4章 條件和循環語句 90
4.1 條件語句 90
4.1.1 if語句 90
4.1.2 switch語句 94
4.2 循環語句 96
4.2.1 for相關語句(ES6) 96
4.2.2 while相關語句 104
4.2.3 break與continue語句 106
4.3 練習題 108
第5章 函數與方法 110
5.1 函數的定義 110
5.1.1 不同形式的函數(ES6) 110
5.1.2 函數名稱(ES6) 124
5.1.3 參數(ES6) 125
5.1.4 主體 132
5.1.5 返回數據與void關鍵字(ES6) 135
5.1.6 定義的位置(ES6) 137
5.1.7 函數的調用形式(ES6) 139
5.2 生成器 142
5.2.1 迭代器協議與生成器(ES6) 142
5.2.2 生成器函數的定義和用法(ES6) 143
5.3 搭配Promise對象 144
5.3.1 Promise對象的用法(ES6、ES9) 144
5.3.2 聚集多個Promise對象(ES6) 148
5.3.3 異步函數與等待表達式(ES8) 154
5.4 練習題 156
第6章 處理數值 159
6.1 Number對象的內置屬性 159
6.1.1 最大的正數和安全整數(ES6) 159
6.1.2 最小的正數和安全整數(ES6) 160
6.1.3 正負無窮值 162
6.1.4 非數值的判斷(ES6) 162
6.1.5 浮點數運算的誤差值(ES6) 166
6.2 Number對象的內置函數 167
6.2.1 轉換爲特定進制的數碼字符串 167
6.2.2 處理小數格式 170
6.2.3 轉換爲數值 172
6.2.4 判斷是否爲整數或有限數(ES6) 175
6.3 Math對象 177
6.3.1 Math對象的常量屬性 177
6.3.2 Math對象的函數(ES6) 178
6.4 練習題 189
第7章 處理字符串 190
7.1 String對象 190
7.1.1 子字符串的索引值 190
7.1.2 特定模式的子字符串的搜索(ES6) 192
7.1.3 子字符串的獲取 194
7.1.4 子字符串的替換 196
7.1.5 字符串的大小寫轉換 198
7.1.6 不同字符串的連接 199
7.1.7 字符串的重複連接 200
7.1.8 字符串的分割 200
7.1.9 特定字符和Unicode數碼的雙向轉換(ES6) 202
7.1.10 重複填充子字符串於擴充後的字符串中(ES8) 204
7.2 將冗長的字符串分割爲多行(ES6) 205
7.3 字符串的擴展運算(ES6) 207
7.4 字符串的插值格式化(ES6) 207
7.5 原始字符串(ES6) 210
7.6 正則表達式與黏性匹配(ES6) 211
7.7 萬國碼字面量(ES6) 214
7.8 練習題 216
第8章 處理數組 217
8.1 Array對象 217
8.1.1 創建特定數組的副本(ES6) 217
8.1.2 創建來自可迭代對象的新數組(ES6) 220
8.1.3 數組元素數據所構成的字符串 223
8.1.4 數組元素的放入和取出 224
8.1.5 新增或刪除數組的多個元素 226
8.1.6 合併多個數組 227
8.1.7 切割數組 228
8.1.8 尋找符合特定條件的數組元素(ES6) 229
8.1.9 自我複製並覆蓋數組的部分元素(ES6) 230
8.1.10 判斷數組各元素是否符合特定條件 232
8.1.11 數組部分元素的填充(ES6) 233
8.1.12 篩選出符合特定條件的數組元素(ES6) 235
8.1.13 循環訪問數組各元素 236
8.1.14 判斷是否爲數組的實例 237
8.1.15 訪問並漸次處理數組各元素的數據 239
8.1.16 反轉數組各元素的順序 244
8.1.17 數組各元素的重新排序 245
8.1.18 判斷特定元素的存在性(ES7) 246
8.2 數組的擴展運算(ES6) 248
8.3 數組元素的匹配(ES6) 249
8.4 數據類型化的按位數組(ES6) 250
8.5 練習題 252
第9章 處理自定義對象 253
9.1 自定義對象的屬性名稱、屬性數據與副本 253
9.1.1 對象屬性的名稱或數據所構成的數組(ES8) 253
9.1.2 精細創建特定對象實例的副本 255
9.2 自定義對象實例之間的相同性與合併 258
9.2.1 判斷兩個對象實例的數據是否完全相同(ES6) 258
9.2.2 合併多個對象實例的所有成員(ES6) 260
9.3 對象實例的簡短自定義語法(ES6) 261
9.4 自定義對象實例的動態成員名稱(ES6) 262
9.5 對象實例的匹配(ES9) 262
9.6 練習題 264
第10章 處理日期和時間 265
10.1 處理日期 265
10.1.1 獲取日期相關數據 265
10.1.2 設置日期相關數據 267
10.1.3 帶有日期的格式化字符串 268
10.2 處理時間 270
10.2.1 獲取時間相關數據 270
10.2.2 設置時間相關數據 272
10.2.3 帶有時間的格式化字符串 274
10.2.4 處理紀元時間至今的毫秒數(ES6) 275
10.3 練習題 277
第11章 DOM的事件處理(一) 278
11.1 鼠標事件 278
11.1.1 單擊和雙擊事件 278
11.1.2 上下文菜單事件 281
11.1.3 鼠標按下與鬆開事件 282
11.1.4 鼠標指針相關進出事件 284
11.1.5 鼠標移動事件 287
11.2 鍵盤事件 289
11.2.1 按壓與按下按鍵事件 289
11.2.2 鬆開按鍵事件 289
11.3 網頁內容的裝卸事件 290
11.3.1 出現錯誤事件 290
11.3.2 加載和頁面顯示事件 292
11.3.3 卸載和頁面隱藏事件 294
11.3.4 先於卸載事件 295
11.3.5 網址散列變化事件 296
11.3.6 滾動事件 298
11.4 表單事件 299
11.4.1 內容變化事件 299
11.4.2 獲取和失去焦點相關事件 300
11.4.3 輸入事件 302
11.4.4 無效事件 303
11.4.5 重置事件 304
11.4.6 搜索事件 306
11.4.7 選定文本事件 307
11.4.8 提交事件 308
11.5 練習題 309
第12章 DOM的事件處理(二) 311
12.1 拖動事件 311
12.1.1 正在拖動事件 311
12.1.2 拖動結束事件 313
12.1.3 拖動進入事件 315
12.1.4 拖動離開事件 316
12.1.5 拖動懸停事件 318
12.1.6 拖動開始事件 319
12.1.7 放下事件 321
12.2 剪貼板事件 323
12.2.1 複製事件 324
12.2.2 剪切事件 325
12.2.3 粘貼事件 325
12.3 視頻和音頻事件 325
12.3.1 加載相關事件 326
12.3.2 清空事件 328
12.3.3 播放結束事件 329
12.3.4 異常相關事件 330
12.3.5 播放與暫停相關事件 331
12.3.6 播放速率變化事件 332
12.3.7 播放位置變化相關事件 333
12.3.8 音量變化事件 335
12.3.9 緩衝等待事件 335
12.4 動畫及過渡事件 336
12.4.1 動畫相關事件 336
12.4.2 過渡結束事件 338
12.5 其他事件 339
12.5.1 details元素實例的切換事件 340
12.5.2 鼠標滾輪事件 341
12.5.3 觸摸相關事件 342
12.5.4 接收服務器數據相關事件 344
12.6 練習題 346
第13章 Reflect對象 347
13.1 Reflect對象介紹(ES6) 347
13.2 間接應用特定函數(ES6) 349
13.3 創建特定對象的實例(ES6) 351
13.4 精細定義新屬性(ES6) 353
13.5 刪除特定屬性(ES6) 354
13.6 獲取特定屬性的數據(ES6) 355
13.7 返回特定屬性的描述器(ES8) 356
13.8 返回特定對象的原型(ES6) 359
13.9 判斷特定屬性的存在性(ES6) 360
13.10 判斷與設置特定對象的擴展性(ES6) 361
13.11 簡易定義新屬性(ES6) 363
13.12 重新設置特定對象的原型(ES6) 365
13.13 返回與列舉特定對象的自定義屬性(ES6) 367
13.14 練習題 370
第14章 Proxy對象、Intl對象和navigator對象實例 371
14.1 Proxy對象 371
14.1.1 創建訪問代理機制的構造函數(ES6) 372
14.1.2 確定被代理的特定對象(ES6) 373
14.1.3 自定義代理函數(ES6) 373
14.1.4 調試訪問代理機制(ES6) 375
14.2 Intl對象 376
14.2.1 精確比較語言敏感的字符串(ECMA-402) 376
14.2.2 語言敏感的日期與時間格式(ECMA-402) 378
14.2.3 語言敏感的數值格式(ECMA-402) 379
14.2.4 返回規範化語言環境名稱(ECMA-402) 380
14.3 window.navigator對象實例 381
14.3.1 獲取瀏覽器相關信息 381
14.3.2 獲取當前地理定位相關數據 383
14.4 練習題 385
第15章 window.document對象實例 386
15.1 返回焦點所在的元素 386
15.2 附加事件處理器至特定元素 388
15.3 收養特定節點 390
15.4 返回所有錨點元素構成的集合 392
15.5 返回當前網址的相關屬性 393
15.6 在當前網頁中動態生成HTML源代碼 394
15.7 內含特定服務器相關數據的cookie 396
15.8 返回當前網頁編碼字符集的名稱 398
15.9 創建代表新屬性的節點 398
15.10 創建代表新註釋的節點 399
15.11 創建代表新片段或新元素的節點 400
15.12 創建代表新文本的節點 402
15.13 返回當前網頁的根元素 404
15.14 訪問當前網址的域名 405
15.15 返回所有embed元素構成的集合 406
15.16 返回所有form元素實例構成的集合 407
15.17 返回特定身份識別碼的元素實例 408
15.18 返回被設置帶有特定CSS類名的所有元素實例的集合 411
15.19 返回特定標籤名稱的所有元素實例的集合 414
15.20 判斷當前網頁是否存在焦點 416
15.21 返回當前網頁的head元素實例 417
15.22 返回當前網頁所有image元素實例的集合 418
15.23 創建當前網頁或者子網頁裏的特定節點實例的副本 420
15.24 獲取當前網頁的最近被修改的日期和時間 423
15.25 返回當前網頁中的所有超鏈接元素實例的集合 425
15.26 返回特定CSS選擇器名稱對應的元素實例或集合 426
15.27 返回和處置當前網頁的加載狀態 429
15.28 返回跳轉前的網址 430
15.29 解除已被附加的事件處理器 432
15.30 返回當前網頁中的所有script元素實例構成的集合 433
15.31 訪問當前網頁的標題文本 434
15.32 練習題 435
第16章 DOM的元素實例 437
16.1 設置焦點跳轉至特定元素實例上的快捷鍵 437
16.2 創建特定元素實例的動畫效果(Web Animations) 439
16.3 添加新元素實例和訪問特定元素實例的所有屬性 441
16.4 使得特定元素實例失去和獲取焦點 445
16.5 訪問子節點或子元素的實例 447
16.6 訪問被應用在特定元素實例的所有CSS類名 450
16.7 模擬鼠標單擊特定元素實例的動作 454
16.8 獲取特定元素的尺寸、座標與可定位的上層元素 455
16.9 比較兩個元素之間的位置關係 458
16.10 判斷是否存在特定子元素或可被編輯 461
16.11 訪問特定元素實例的文本被書寫的方向 463
16.12 返回頭尾的子節點實例或子元素實例 464
16.13 訪問或刪除特定元素實例的特定屬性 467
16.14 訪問特定元素實例的常見屬性的數據 469
16.15 判斷是否存在任何子節點實例 472
16.16 在特定子節點實例之前新增另一子節點實例 473
16.17 判斷兩個節點實例的內容是否完全相同 475
16.18 返回下一個或上一個兄弟節點實例 478
16.19 返回特定節點實例的相關數據 479
16.20 合併多個相鄰的文本子節點實例 481
16.21 返回父節點實例 484
16.22 刪除或替換子節點實例 486
16.23 獲取滾動條的相關數據 488
16.24 練習題 491
第17章 BOM的多個對象實例 492
17.1 window對象實例 492
17.1.1 顯示多種對話框與搜索特定文本 492
17.1.2 滾動至座標或滾動特定距離 496
17.2 screen對象實例 498
17.3 history對象實例 499
17.4 location對象實例 501
17.5 練習題 503
第18章 類 504
18.1 類的定義和繼承 504
18.1.1 類的定義(ES6) 505
18.1.2 類的繼承(ES6) 507
18.2 類的靜態成員 508
18.2.1 靜態成員的概念和定義(ES6) 509
18.2.2 靜態成員的運用(ES6) 511
18.3 類的設置器和取得器 511
18.3.1 設置器和取得器的概念和定義(ES6) 512
18.3.2 設置器和取得器的運用(ES6) 513
18.4 練習題 514
第19章 錯誤處理 516
19.1 異常錯誤的種類 516
19.1.1 語法錯誤 517
19.1.2 數據類型錯誤 518
19.1.3 評估錯誤 520
19.1.4 範圍錯誤 522
19.1.5 引用錯誤 524
19.1.6 網址在編碼或解碼上的錯誤 526
19.1.7 邏輯錯誤 527
19.2 處置特定異常錯誤 529
19.2.1 試驗與捕獲特定異常錯誤 529
19.2.2 拋出自定義的異常錯誤 530
19.3 調試機制 531
19.3.1 嚴格模式 531
19.3.2 源代碼的斷點設置和逐句執行 535
19.4 練習題 536
第20章 數據的驗證與傳輸 538
20.1 HTML表單的內置驗證 538
20.1.1 必填驗證 538
20.1.2 字符個數和數值範圍的驗證 540
20.2 自定義的驗證 542
20.2.1 文本字段的模式驗證 544
20.2.2 JavaScript源代碼實現的驗證 545
20.3 異步數據傳輸 548
20.3.1 AJAX的工作原理 549
20.3.2 AJAX的編程方式 552
20.4 練習題 561
第21章 響應式機制 563
21.1 通過CSS語法的版本 563
21.1.1 頁面的元信息 565
21.1.2 媒體查詢 565
21.2 通過JavaScript語法的版本 567
21.2.1 簡易判斷窗口尺寸的版本 572
21.2.2 直接變更CSS規則的版本 575
21.3 源代碼的加密 579
21.3.1 改寫HTML與CSS成爲JavaScript源代碼 580
21.3.2 JavaScript源代碼的全數加密 585
21.4 練習題 586
附錄 練習題答案 588
作者介紹
柯霖廷,javaScript資深開發工程師,前端開發講師,擁有十餘年前端及Web開發經驗。