JavaScript是目前Web開(kāi)發(fā)領(lǐng)域非常流行的一種編程語(yǔ)言, 得到眾多IT從業(yè)人員和編程愛(ài)好者的關(guān)注。本書(shū)分為22章, 在ES6的基礎(chǔ)上, 系統(tǒng)地介紹了JavaScript的基本語(yǔ)法、語(yǔ)言特性、相關(guān)工具、基本對(duì)象、技術(shù)以及推動(dòng)現(xiàn)代JavaScript開(kāi)發(fā)的范例等方面的知識(shí)。本書(shū)內(nèi)容由淺及深, 既有變量、控制流、函數(shù)等基礎(chǔ)內(nèi)容, 又有異步編程、正則表達(dá)式等高級(jí)知識(shí)。JavaScript語(yǔ)言的讀者閱讀。
這是學(xué)習(xí)JavaScript的一個(gè)大時(shí)代。新的JavaScript標(biāo)準(zhǔn)——ECMAScript 6.0 (ES6)已經(jīng)定稿,學(xué)習(xí)如何使用這種語(yǔ)言來(lái)開(kāi)發(fā)高質(zhì)量的應(yīng)用程序變得前所未有的簡(jiǎn)單和舒服。
本書(shū)將帶領(lǐng)程序員開(kāi)啟一次充實(shí)的ES6之旅,同時(shí)也會(huì)介紹一些相關(guān)的工具和技術(shù)。本書(shū)不僅會(huì)介紹基礎(chǔ)知識(shí)(比如變量、控制流和數(shù)組),還會(huì)講解函數(shù)式編程和異步編程等復(fù)雜的概念。你將會(huì)學(xué)習(xí)如何在客戶端(或者在服務(wù)端使用Node.js)構(gòu)建強(qiáng)大的響應(yīng)式Web應(yīng)用。
通過(guò)閱讀本書(shū),你將學(xué)會(huì):
■ 使用ES6編程,然后通過(guò)轉(zhuǎn)譯來(lái)兼容ES5;
■ 將數(shù)據(jù)轉(zhuǎn)換為JavaScript可以使用的格式;
■ 理解JavaScript中函數(shù)的基本用法和機(jī)制;
■ 探索對(duì)象和面向?qū)ο缶幊蹋?br />
■ 了解新的概念,比如迭代器、生成器和代理;
■ 理解異步編程的復(fù)雜性;
■ 利用文檔對(duì)象模型(DOM)來(lái)構(gòu)建基于瀏覽器的應(yīng)用;
■ 學(xué)習(xí)Node.js的基礎(chǔ)知識(shí)來(lái)構(gòu)建服務(wù)器端應(yīng)用程序。
這是開(kāi)發(fā)者學(xué)習(xí)JS的一個(gè)大時(shí)代。但是我說(shuō)的并不是那種‘我的代碼能跑起來(lái)’一樣的小打小鬧。這本書(shū)將帶你更深入地學(xué)習(xí)我們所需的那些知識(shí)。”
——Kyle Simpson 《你不知道的JavaScript》系列書(shū)作者
“這本書(shū)寫(xiě)得很好,內(nèi)容緊湊,介紹了JavaScript的一切,甚至包含了ECMAScript 6!
——Axel Rauschmayer 《深入理解JavaScript》作者
Ethan Brown是互動(dòng)營(yíng)銷公司Pop Art的工程總監(jiān),負(fù)責(zé)網(wǎng)站和網(wǎng)絡(luò)服務(wù)的架構(gòu)和實(shí)現(xiàn),面向從小公司到跨國(guó)企業(yè)的多種客戶。他有著超過(guò)20年的編程經(jīng)驗(yàn)。
目錄
第1章 第一個(gè)應(yīng)用 1
1.1 從哪里開(kāi)始 2
1.2 實(shí)用的工具 2
1.2.1 語(yǔ)法高亮 3
1.2.2 括號(hào)匹配 3
1.2.3 代碼折疊 4
1.2.4 自動(dòng)補(bǔ)全 4
1.3 關(guān)注注釋 4
1.4 從這里開(kāi)始 5
1.5 JavaScript控制臺(tái) 7
1.6 jQuery 8
1.7 繪制圖元 8
1.8 自動(dòng)執(zhí)行重復(fù)任務(wù) 10
1.9 處理用戶輸入 11
1.10 Hello, World 13
第2章 JavaScript開(kāi)發(fā)中的常用工具 14
2.1 在當(dāng)下編寫(xiě)ES6代碼 14
2.2 ES6的新特性 15
2.2.1 安裝Git 16
2.2.2 終端 16
2.2.3 項(xiàng)目根目錄 17
2.2.4 版本控制:Git 17
2.2.5 包管理工具:npm 20
2.2.6 構(gòu)建工具:Gulp和Grunt 22
2.2.7 項(xiàng)目結(jié)構(gòu) 23
2.3 轉(zhuǎn)換器 24
2.3.1 使用Gulp運(yùn)行Babel 24
2.3.2 格式審查工具 26
2.4 總結(jié) 29
第3章 字面量、變量、常量和數(shù)據(jù)類型 32
3.1 變量和常量 32
3.2 變量和常量:用哪個(gè) 33
3.3 標(biāo)識(shí)符命名 34
3.4 字面量 35
3.5 基本類型和對(duì)象 36
3.6 數(shù)字 37
3.7 字符串 39
3.8 特殊字符 40
3.8.1 模板字符串 41
3.8.2 多行字符串 42
3.8.3 數(shù)字用作字符串 43
3.9 布爾型 43
3.10 符號(hào) 43
3.11 null和undefined 44
3.12 對(duì)象 44
3.13 Number, String和Boolean對(duì)象 47
3.14 數(shù)組 47
3.15 對(duì)象和數(shù)組的拖尾逗號(hào) 49
3.16 日期 50
3.17 正則表達(dá)式 50
3.18 映射和集合 51
3.19 數(shù)據(jù)類型轉(zhuǎn)換 51
3.19.1 轉(zhuǎn)換成數(shù)字 51
3.19.2 轉(zhuǎn)換成字符串 52
3.19.3 轉(zhuǎn)換成布爾型 52
3.20 總結(jié) 53
第4章 控制流 54
4.1 控制流的底層 54
4.1.1 while循環(huán) 57
4.1.2 塊語(yǔ)句 58
4.1.3 空格 59
4.1.4 輔助方法 60
4.1.5 if else語(yǔ)句 60
4.1.6 do...while循環(huán) 62
4.1.7 for循環(huán) 63
4.1.8 if語(yǔ)句 64
4.1.9 最后的整合 65
4.2 JavaScript中的控制語(yǔ)句 66
4.2.1 控制流異!67
4.2.2 鏈?zhǔn)絠f… else語(yǔ)句 67
4.2.3 元語(yǔ)法 68
4.2.4 其他循環(huán)模式 69
4.2.5 switch語(yǔ)句 70
4.2.6 for…in循環(huán) 74
4.2.7 for…of循環(huán) 74
4.3 實(shí)用的控制流模式 74
4.3.1 使用continue減少條件嵌套 75
4.3.2 使用break或return避免不必要的計(jì)算 75
4.3.3 在循環(huán)結(jié)束后使用索引的值 76
4.3.4 列表變動(dòng)時(shí)索引遞減 76
4.4 總結(jié) 77
第5章 表達(dá)式和運(yùn)算符 78
5.1 運(yùn)算符 79
5.2 算術(shù)運(yùn)算符 80
5.3 運(yùn)算符優(yōu)先級(jí) 82
5.4 比較運(yùn)算符 83
5.5 比較數(shù)字 85
5.6 字符串連接 86
5.7 邏輯運(yùn)算符 87
5.8 與、或和非 88
5.8.1 短路求值 89
5.8.2 非布爾值的邏輯運(yùn)算符 89
5.8.3 條件運(yùn)算符 90
5.8.4 逗號(hào)運(yùn)算符 91
5.9 分組運(yùn)算符 91
5.9.1 位運(yùn)算符 91
5.9.2 類型判斷運(yùn)算符 93
5.9.3 void運(yùn)算符 94
5.9.4 賦值運(yùn)算符 94
5.10 解構(gòu)賦值 95
5.11 對(duì)象和數(shù)組運(yùn)算符 97
5.12 模板字符串中的表達(dá)式 97
5.13 表達(dá)式和控制流模式 97
5.13.1 將if…else語(yǔ)句轉(zhuǎn)化成條件表達(dá)式 98
5.13.2 將if語(yǔ)句轉(zhuǎn)化成短路求值的邏輯或(||)表達(dá)式 98
5.14 總結(jié) 98
第6章 函數(shù) 99
6.1 返回值 100
6.2 引用調(diào)用 100
6.3 函數(shù)參數(shù) 101
6.3.1 參數(shù)會(huì)讓函數(shù)有所區(qū)別嗎 103
6.3.2 解構(gòu)參數(shù) 104
6.3.3 默認(rèn)參數(shù) 105
6.4 函數(shù)作為對(duì)象屬性 105
6.5 this關(guān)鍵字 105
6.6 函數(shù)表達(dá)式和匿名函數(shù) 107
6.7 箭頭符號(hào) 109
6.8 調(diào)用、請(qǐng)求和綁定 110
6.9 總結(jié) 112
第7章 作用域 113
7.1 作用域和存在 114
7.2 靜態(tài)作用域與動(dòng)態(tài)作用域 114
7.3 全局作用域 115
7.4 塊作用域 117
7.5 變量屏蔽 117
7.6 函數(shù)、閉包和靜態(tài)作用域 119
7.7 即時(shí)調(diào)用函數(shù)表達(dá)式 120
7.8 函數(shù)作用域和提升 121
7.9 函數(shù)提升 123
7.10 臨時(shí)死區(qū) 124
7.11 嚴(yán)格模式 124
7.12 總結(jié) 125
第8章 數(shù)組及其處理 126
8.1 數(shù)組概覽 126
8.2 操作數(shù)組內(nèi)容 127
8.2.1 在起始和末尾添加或刪除元素 128
8.2.2 在末尾添加多個(gè)元素 128
8.2.3 獲取子數(shù)組 128
8.2.4 從任意位置添加或刪除元素 129
8.2.5 數(shù)組內(nèi)的分割和替換 129
8.2.6 用指定值填充數(shù)組 129
8.2.7 數(shù)組反轉(zhuǎn)和排序 130
8.3 數(shù)組搜索 130
8.4 數(shù)組的基本操作:map和filter 133
8.5 數(shù)組魔法:reduce 135
8.6 數(shù)組方法,已刪除或者未定義的元素 138
8.7 字符串連接 138
8.8 總結(jié) 139
第9章 對(duì)象以及面向?qū)ο缶幊獭?41
9.1 屬性枚舉 141
9.1.1 for...in 142
9.1.2 Object.keys 142
9.2 面向?qū)ο缶幊獭?43
9.2.1 創(chuàng)建類和實(shí)例 143
9.2.2 動(dòng)態(tài)屬性 145
9.2.3 類即函數(shù) 146
9.2.4 原型 147
9.2.5 靜態(tài)方法 148
9.2.6 繼承 149
9.2.7 多態(tài) 151
9.2.8 枚舉對(duì)象屬性,回顧 151
9.2.9 字符串表示 152
9.3 多繼承、混合類和接口 153
9.4 總結(jié) 155
第10章 Maps和Sets 156
10.1 Maps 156
10.2 Weak Maps 158
10.3 Sets 159
10.4 Weak Sets 160
10.5 打破對(duì)象習(xí)慣 161
第11章 異常和錯(cuò)誤處理 162
11.1 Error對(duì)象 162
11.2 使用try和catch處理異!163
11.3 拋出異!164
11.4 異常處理和調(diào)用棧 165
11.5 try...catch... finally 166
11.6 讓異常成為例外 167
第12章 迭代器和生成器 168
12.1 迭代協(xié)議 170
12.2 生成器 172
12.2.1 yield表達(dá)式和雙向交流 173
12.2.2 生成器和返回值 175
12.3 總結(jié) 175
第13章 函數(shù)和抽象思考的力量 176
13.1 函數(shù)作為子程序 176
13.2 函數(shù)作為有返回值的子程序 177
13.3 函數(shù)即…函數(shù) 178
13.4 那又如何? 180
13.5 IIEFs和異步代碼 182
13.6 函數(shù)變量 184
13.6.1 數(shù)組中的函數(shù) 186
13.6.2 將函數(shù)傳給函數(shù) 187
13.6.3 在函數(shù)中返回函數(shù) 188
13.7 遞歸 189
13.8 總結(jié) 190
第14章 異步編程 191
14.1 類比 192
14.2 回調(diào) 192
14.2.1 setInterval和clearInterval 193
14.2.2 Scope和異步執(zhí)行 194
14.2.3 錯(cuò)誤優(yōu)先回調(diào) 195
14.2.4 回調(diào)地獄 196
14.3 Promise 197
14.3.1 創(chuàng)建Promise 198
14.3.2 使用Promise 198
14.3.3 事件 200
14.3.4 Promise鏈 202
14.3.5 避免不被處理的Promise 203
14.4 生成器 205
14.4.1 向前一步和退后兩步 207
14.4.2 不要自己編寫(xiě)生成器運(yùn)行器 208
14.4.3 生成器運(yùn)行器中的異常處理 208
14.5 總結(jié) 209
第15章 日期和時(shí)間 211
15.1 日期、時(shí)區(qū)、時(shí)間戳以及Unix時(shí)間 211
15.2 構(gòu)造Date對(duì)象 212
15.3 Moment.js 213
15.4 JavaScript中Date的實(shí)際用法 214
15.5 構(gòu)造日期對(duì)象 214
15.5.1 在服務(wù)端構(gòu)造日期對(duì)象 214
15.5.2 在瀏覽器中構(gòu)造Date對(duì)象 215
15.6 傳遞日期 215
15.7 展日期 216
15.8 日期的組成 217
15.9 日期的比較 218
15.10 日期的四則運(yùn)算 218
15.11 用戶友好的相對(duì)日期 219
15.12 總結(jié) 220
第16章 數(shù)學(xué)運(yùn)算 221
16.1 格式化數(shù)字 221
16.1.1 固定小數(shù) 222
16.1.2 指數(shù)符號(hào) 222
16.1.3 固定精度 222
16.1.4 不同進(jìn)制 223
16.1.5 進(jìn)一步格式化數(shù)字 223
16.2 常量 224
16.3 代數(shù)函數(shù) 224
16.3.1 冪運(yùn)算 224
16.3.2 對(duì)數(shù)函數(shù) 225
16.3.3 其他函數(shù) 225
16.3.4 偽隨機(jī)數(shù)生成器 226
16.4 三角函數(shù) 227
16.5 雙曲線函數(shù) 227
第17章 正則表達(dá)式 229
17.1 子字符串匹配和替換 229
17.2 構(gòu)造正則表達(dá)式 230
17.3 使用正則表達(dá)式進(jìn)行搜索 231
17.4 使用正則表達(dá)式進(jìn)行替換 231
17.5 消費(fèi)輸入 232
17.6 分枝 234
17.7 匹配HTML 235
17.8 字符集 235
17.9 具名字符集 236
17.10 重復(fù) 237
17.11 句點(diǎn)元字符和轉(zhuǎn)義 238
17.12 分組 238
17.13 懶惰匹配,貪婪匹配 240
17.14 反向引用 241
17.15 替換組 242
17.16 函數(shù)替換 243
17.17 錨點(diǎn) 245
17.18 單詞邊界匹配 245
17.19 向前查找 247
17.20 動(dòng)態(tài)構(gòu)造正則表達(dá)式 248
17.21 總結(jié) 248
第18章 瀏覽器中的JavaScript 249
18.1 ES5還是ES6 249
18.2 文檔對(duì)象模型 250
18.3 關(guān)于樹(shù)的專用語(yǔ) 252
18.4 DOM中的“Get”方法 253
18.5 查詢DOM元素 253
18.6 多個(gè)DOM元素 254
18.7 創(chuàng)建DOM元素 255
18.8 樣式元素 256
18.9 數(shù)據(jù)屬性 257
18.10 事件 258
18.11 事件捕獲與事件冒泡 259
18.12 Ajax 263
18.13 總結(jié) 267
第19章 jQuery 268
19.1 萬(wàn)能的美元(符號(hào)) 268
19.2 引入jQuery 269
19.3 等待DOM加載 269
19.4 jQuery封裝的DOM元素 270
19.5 操作元素 270
19.6 展開(kāi)jQuery對(duì)象 272
19.7 Ajax 273
19.8 總結(jié) 273
第20章 Node 274
20.1 Node基礎(chǔ) 274
20.2 模塊(Module) 275
20.3 核心module、文件module和npm module 277
20.4 自定義函數(shù)Module 279
20.5 訪問(wèn)文件系統(tǒng) 281
20.6 進(jìn)程 284
20.7 操作系統(tǒng) 286
20.8 子進(jìn)程 287
20.9 流 288
20.10 Web服務(wù)器 289
20.11 總結(jié) 291
第21章 對(duì)象屬性配置和代理 292
21.1 存取器屬性:getter和setter 292
21.2 對(duì)象屬性的屬性 294
21.3 對(duì)象保護(hù):凍結(jié)、封裝、以及阻止擴(kuò)展 296
21.4 代理 299
21.5 總結(jié) 301
第22章 附加資源 302
22.1 在線文檔 302
22.2 期刊 303
22.3 博客和教程 303
22.4 Stack Overflow 304
22.5 給開(kāi)源項(xiàng)目做貢獻(xiàn) 306
22.6 總結(jié) 307