JavaScript 語法簡明手冊
內容描述
本書包含大量精心繪製的示意圖和豐富的示例代碼,講解了常用的JavaScript語法特性,
為JavaScript初學者繪製了一條平緩的學習曲線。
本書涵蓋原生數據類型、強制類型轉換、作用域、閉包、運算符、面向對象編程、事件循環機制等內容。
這些內容由淺入深,適合初學者按順序閱讀。
本書還突出了ES10引入的一些新特性,便於有進階需要的讀者翻閱。
目錄大綱
目錄:
第1章講述形式1
1.1理論1
1.2實例1
1.3代碼清單1
1.4示意圖2
1.4.1抽象概念2
1.4.2代碼片段3
1.5主要內容3
1.6注意事項4
第2章Chrome控制台5
2.1 copy函數5
2.2 console.dir 5
2.3 console.error 6
2.4 console.time和console.timeEnd 7
2.5 console.clear 7
2.6打印對象8
第3章歡迎使用JavaScript 9
3.1入口點9
3.1.1 DOMContentLoaded 9
3.1.2注意事項10
3.1.3導入外部腳本11
3.1.4導入與導出12
3.2嚴格模式14
3.2.1對一個作用域開啟嚴格模式14
3.2.2嚴格模式小結15
3.3字面量15
3.4變量17
3.4.1值佔位符17
3.4.2動態類型18
3.4.3定義或聲明18
3.5引用傳遞18
3.6作用域的怪癖19
3.6.1怪癖1:函數內的let和const與全局變量19
3.6.2怪癖2:var依附於window/this對象,而let和const不會20
第4章語句21
4.1求值語句21
4.2表達式22
第5章基本類型23
5.1基本類型23
5.1.1 boolean 24
5.1.2 null 24
5.1.3 undefined 24
5.1.4 number 25
5.1.5 bigint 26
5.1.6 string 27
5.2模板字符串28
5.3 symbol 30
5.4構造函數和實例33
5.5對基本類型執行方法35
5.5.1使用括號訪問對象屬性35
5.5.2連接方法36
第6章強制類型轉換37
6.1強制類型轉換示例37
6.1.1構造函數中的強制類型轉換38
6.1.2強制類型轉換詳解39
6.2多個值相加42
6.3運算符優先級43
6.4字符串與數值的比較43
6.5運算符優先級和結合性一覽表45
6.6左值和右值47
6.6.1賦值運算符47
6.6.2算術加法運算符47
6.7 null與undefined 47
第7章作用域50
7.1變量定義50
7.1.1區分大小寫50
7.1.2定義50
7.2變量提升51
7.3函數提升53
7.4變量類型56
7.5作用域可見性的區別56
7.5.1在全局作用域中56
7.5.2在函數作用域中57
7.5.3閉包58
7.5.4在塊級作用域中59
7.5.5在類中59
7.6 const 60
7.6.1 const和數組61
7.6.2 const和對象字面量61
7.6.3 const小結62
7.7注意事項62
第8章運算符63
8.1算術運算符63
8.2賦值運算符65
8.3字符串運算符65
8.4比較運算符65
8.5邏輯運算符66
8.6位運算符67
8.7 typeof運算符67
8.8三元運算符68
8.9 delete 68
8.10 in 69
第9章.rest和.spread 71
9.1 rest屬性71
9.2 spread屬性72
9.3 .rest和.spread 73
9.3.1語法詳解73
9.3.2編寫帶rest參數的sum()函數75
9.3.3使用spread來扁平化數組76
9.3.4在數組、對像或函數參數之外使用spread 76
9.4解構賦值77
9.4.1使用spread合併對象79
9.4.2使用spread合併數組80
第10章閉包81
10.1閉包入門81
10.1.1什麼是閉包81
10.1.2漂亮的閉包84
10.1.3閉包小結86
10.2參數個數87
10.3柯里化87
第11章循環89
11.1 JavaScript中的循環類型89
11.1.1遞增和遞減89
11.1.2動態生成HTML元素90
11.1.3渲染列表90
11.1.4動態排序的表格90
11.1.5注意事項90
11.2 for循環91
11.2.1基於零索引的計數器91
11.2.2無限for循環91
11.2. 3多條語句92
11.2.4遞增數字92
11.2.5 for循環和let作用域92
11.2.6嵌套for循環93
11.2.7循環的長度93
11.2.8跳步94
11.2.9提前中斷94
11.2. 10自定義中斷條件94
11.2.11跳轉到標籤95
11.2.12跳出標記的塊級作用域96
11.3 for.of循環96
11.3.1 for.of和生成器97
11.3.2 for.of和字符串98
11.3.3 for.of和數組98
11.3.4 for.of和對象99
11.3.5 for.of循環和轉換的可迭代對象99
11.4 for.in循環100
11.5 while循環100
第12章數組和字符串102
12.1 Array.prototype.sort 102
12.2 Array.forEach 103
12.3 Array.every 104
12.4 Array.some 105
12.5 Array.filter 106
12.6 Array.map 106
12.7 Array.reduce 107
12.7.1 Array. reduce與Array.filter 107
12.7.2更新數據庫中的對象屬性107
12.7.3 reduce的實際應用107
12.7.4注意事項108
12.8 Array.flat 109
12.9 Array.flatMap 109
12.10 String.prototype.matchAll 109
12.10.1使用全局匹配符/g 110
12.10.2正則表達式的捕獲組110
12.10.3使用matchAll的理由112
12.10.4 matchAll的工作方式112
12.10.5使用matchAll的捕獲組示例112
12.10.6注意事項113
12.11比較兩個對象113
12.11.1編寫arrcmp 115
12.11.2改進objcmp 116
12.11.3針對更複雜的對象測試objcmp 117
12.11.4 objcmp小結119
第13章函數120
13.1函數120
13.1.1函數結構120
13.1 .2匿名函數121
13.1.3將函數賦給變量122
13.2 this關鍵字的來源125
第14章高階函數126
14.1理論126
14.1.1抽象126
14.1.2編寫第一個高階函數126
14.2定義127
14.3抽象127
14.4迭代器128
14.4.1逐行解析map函數129
14.4.2調用自定義的map函數130
14.4.3調用Array.map 131
14.4.4 for循環怎麼了131
14.5注意事項131
第15章箭頭函數132
15.1箭頭函數132
15.1.1無return的返回133
15.1.2作為事件的箭頭函數133
15.2箭頭函數的結構134
15.2.1實參135
15.2.2從箭頭函數返回135
15.3 ES風格函數的相似性136
15.3.1無this綁定137
15.3.2無arguments對象137
15.3.3無構造函數137
15.3.4傳統函數和箭頭函數用作事件回調函數138
15.3.5繼承的this語境139
第16章動態創建HTML元素140
16.1設置CSS樣式140
16.2使用appendChild方法向DOM中添加元素141
16.2.1 document.body 141
16.2.2 getElementById 142
16.2.3 querySelector 142
16.3編寫函數來創建元素142
16.3.1函數參數142
16.3.2函數體143
16.3 .3導入並使用absolute函數145
16.4使用構造函數來創建對象146
第17章原型147
17.1原型147
17.1.1對象字面量的原型148
17.1.2原型鏈接149
17.1.3原型鏈150
17.1.4查找方法150
17.1.5數組方法151
17.2父對象152
17.2.1擴展自己的對象152
17.2. 2 constructor屬性153
17.2.3 Function 154
17.3原型實踐155
17.3.1對象字面量155
17.3.2使用Function構造函數156
17.3.3原型157
17.3.4使用Object.create來創建對象158
17.3.5示例繼續159
17.3.6構造函數160
17.3.7 new運算符161
17.3.8 class關鍵字162
第18章面向對象編程164
18.1 Ingredient 164
18.2 FoodFactory 164
18.3 Vessel 164
18.4 Burner 165
18.5灶台類型與多態爐灶166
18.6類定義166
18.6.1 print.js 167
18.6.2 Ingredient 167
18.6.3 FoodFactory 168
18.6.4 Fridge 168
18.6.5 convert_energy_to_heat 169
18.6.6 Vessel 170
18.6.7 Burner 172
18.6.8 Range 172
18.7組裝175
18.7 .1定義成分176
18.7.2實例化灶台對象177
第19章事件179
19.1瀏覽器事件179
19.2合成事件179
19.2.1事件對象179
19.2.2事件捕獲與事件冒泡180
19.2.3 dispatchEvent 181
19.2 .4 removeEventListener 181
19.2.5 CustomEvent對象182
19.2.6 setTimeout 183
19.2.7 setInterval 184
19.3攔截瀏覽器事件184
19.4顯示鼠標位置185
19.5通用的鼠標事件類186
19.5.1包含和使用Mouse類187
19.5.2解析Mouse類188
第20章網絡請求190
20.1回調地獄192
20.2 Promise 193
20.2.1 Promise.resolve 193
20.2.2 Promise.reject 195
20.2.3組裝195
20.2.4 Promise.all 196
20.2.5 Promise解析197
20.2.6 Promise小結197
20.3 axios 198
20.4 FetchAPI 198
20.5獲取POST負載199
20.6 async/await 200
20.6.1 async關鍵字的基礎200
20.6 .2 await 202
20.6.3 async/await中的try-catch 202
20.6.4小結203
20.7生成器204
20.7.1 yield 204
20.7.2捕獲錯誤205
第21章事件循環206
第22章調用棧209
22.1什麼是調用棧209
22.2執行語境211
22.2.1什麼是執行語境211
22.2.2根執行語境211
22.2.3工作方式211
22.3代碼中的執行語境211
22.3. 1 window與全局作用域212
22.3.2調用棧212
22.3.3 call、bind、apply 214
22.3.4棧溢出214
作者介紹
Greg Sidelnikov
以“JavaScript老師”自稱,從2004年開始編寫和出版各類程序設計教程,
涉及JavaScript、CSS、jQuery、Node API等,其中一些被加州大學歐文分校等學校採用。
【譯者簡介】
侯振龍
管理科學與工程專業碩士,軟件開發工程師,具有10年軟件開發經驗,現就職於某外資企業。