JavaScript核心原理——從語言設計到應用實踐

  • 出版商: 清華大學
  • 出版日期: 2026-07-01
  • 售價: $419
  • 語言: 簡體中文
  • 頁數: 304
  • ISBN: 7302723184
  • ISBN-13: 9787302723189
  • 相關分類: JavaScript
  • 下單後立即進貨 (約4週~6週)

  • JavaScript核心原理——從語言設計到應用實踐-preview-1
  • JavaScript核心原理——從語言設計到應用實踐-preview-2
  • JavaScript核心原理——從語言設計到應用實踐-preview-3
  • JavaScript核心原理——從語言設計到應用實踐-preview-4
  • JavaScript核心原理——從語言設計到應用實踐-preview-5
  • JavaScript核心原理——從語言設計到應用實踐-preview-6
  • JavaScript核心原理——從語言設計到應用實踐-preview-7
JavaScript核心原理——從語言設計到應用實踐-preview-1

商品描述

本書將JavaScript語法與語言設計規範相結合,帶領讀者從規範的角度來理解引擎背後的執行機制。本書重點介紹 ES6及後續引入的內容,並涵蓋 ES2025及諸多特性。全書分為三大部分,共有16章,通過JavaScript初級、高級、進階三大部分,分別介紹JavaScript發展史、JavaScript類型系統、JavaScript代碼組織方式、JavaScript語言基礎、函數、對象、數組、日期與時間、國際化、正則表達式、Set和 Map、代理和反射、類、疊代器與生成器、異步編程和新特性等。 本書主要面向廣大從事 Web前端開發的技術人員、高等教育的專任教師、高等學校的在讀學生及相關領域的廣大科研人員。

作者簡介

孫凱,本科學歷,從事web開發7年。精通JavaScript語言,EcmaScript contributor(JavaScript語言實現標準規範貢獻者),對語言規範有深入理解。2020年為暢銷書《JavaScript高級程序設計》(第四版)提交30余處勘誤且被采納,與業界多位知名專家、作/譯者有過深度交流,熱愛開源分享。

目錄大綱

目錄

 

 

 

第1章JavaScript發展史1

1.1語言誕生1

1.1.1JavaScript 1.12

1.1.2JavaScript 1.23

1.2標準建立與命名4

1.2.1ECMAScript 2和ECMAScript 36

1.2.2ECMAScript 4與ECMAScript 3.1修訂版草案7

1.2.3嚴格模式與OneJS9

1.3統一與未來10

1.3.1更完善的提案制度10

1.3.2向前兼容的關鍵字12

1.3.3語義完善13

1.3.4簡化概念14

1.3.5快速發展14

1.3.6社區溝通15

1.3.7規範性公約15

第2章JavaScript類型系統18

2.1String類型18

2.1.1字符串編碼19

2.1.2多進制表示方式19

2.1.3代碼點轉換規則21

2.1.4計算JavaScript字符串中的符號數量22

2.1.5結構良好的字符串25

2.1.6結構良好的JSON.stringify26

2.1.7字符串的歸一化27

2.1.8模板字符串30

2.1.9標簽函數30

2.1.10字符串方法31

2.2數值33

2.2.1Number類型34

2.2.2BigInt類型36

2.2.3數值字面量的表示36

2.2.4數值的比較37

2.2.5數值的轉換38

2.2.6數值分隔符39

2.2.7數值與安全40

2.2.8精確求和40

2.3Boolean類型41

2.4Undefined類型和Null類型41

2.4.1空值判斷的演進42

2.4.2支持私有屬性44

2.4.3參數及解構默認值中的空值判定44

2.5Symbol類型46

2.5.1Symbol屬性檢索46

2.5.2Symbol共享體系47

2.5.3Wellknown Symbols48

2.6類型檢測56

2.6.1typeof是如何識別類型的56

2.6.2instanceof57

2.6.3Object.prototype.toString()58

2.6.4品牌檢查59

2.7類型轉換60

2.8不同類型的相等性測試62

第3章JavaScript代碼組織方式63

3.1腳本63

3.1.1腳本評估64

3.1.2全局聲明初始化64

3.1.3受限全局屬性與詞法遮蔽66

3.2模塊67

3.2.1導出語法68

3.2.2導入語法70

3.2.3重命名導入導出70

3.2.4間接綁定與模塊隱私性71

3.2.5模塊命名空間對象72

3.2.6模塊元數據72

3.2.7腳本中的模塊導入語法73

3.2.8導入和導出記錄73

3.2.9模塊加載階段75

3.2.10與CJS交互78

3.2.11動態導入79

3.2.12Import Attributes80

3.2.13JSON模塊80

3.2.14延遲模塊評估81

第4章JavaScript語言基礎82

4.1源代碼82

4.2標識符與保留字83

4.2.1關鍵字與保留字83

4.2.2有效標識符85

4.2.3可接受的Unicode符號87

4.3詞法環境與詞法聲明88

4.3.1TDZ的選擇與應用88

4.3.2暫時性死區的價值89

4.3.3const與不變性無關90

4.3.4丟棄綁定90

4.3.5聲明過程與提升91

4.3.6引用記錄規範類型92

4.4語句95

4.4.1可選的catch語句97

4.4.2Hashbang98

4.5表達式與操作符98

4.5.1邏輯賦值運算符98

4.5.2解構賦值99

4.6循環101

4.7可選的分號104

4.8上下文與環境記錄106

4.8.1作用域107

4.8.2環境組件的變遷108

4.9Realm110

4.10錯誤與異常113

4.10.1錯誤類別113

4.10.2throw表達式115

4.10.3Error Cause116

4.10.4Error.isError()117

第5章函數118

5.1函數基本構造118

5.1.1函數name屬性及其推斷119

5.1.2函數/類名的綁定方式120

5.1.3參數列表121

5.1.4非簡單參數122

5.1.5默認值參數計算位置122

5.1.6函數參數的傳遞方式123

5.1.7arguments對象125

5.1.8關於arguments對象不是數組的論點126

5.1.9函數內置屬性的可操作性126

5.1.10函數的toString()方法127

5.2箭頭函數129

5.3函數聲明及實例化過程130

5.4函數調用與this綁定131

5.5塊中的函數聲明132

5.6嚴格模式133

5.6.1嚴格模式下的擴展保留字134

5.6.2不支持未聲明變量賦值134

5.6.3不支持使用delete刪除未限定標識符134

5.6.4不支持隱式八進制134

5.6.5嚴格模式下函數中的限制134

5.6.6嚴格模式下對象操作的限制136

5.6.7不支持with語句136

5.6.8嚴格模式下禁止forin初始器137

5.7尾調用137

第6章對象139

6.1創建對象139

6.1.1屬性簡寫140

6.1.2可計算屬性141

6.1.3屬性的評估順序141

6.1.4訪問器屬性142

6.1.5類方法144

6.1.6對象的非規範構造方式145

6.2內部槽和內部方法146

6.2.1基本內部方法147

6.2.2定義而不是賦值148

6.2.3屬性的檢索與復制150

6.2.4更安全的屬性檢查機制150

6.2.5鍵的檢索順序151

6.3屬性描述符153

6.4原型155

6.4.1原型鏈156

6.4.2原型模式與繼承157

第7章數組159

7.1數組創建方式159

7.1.1數組字面量160

7.1.2Array160

7.1.3工廠方法160

7.1.4數組的length161

7.2索引訪問能力的擴展162

7.3數組方法163

7.3.1元素查找163

7.3.2反向查找164

7.3.3數組展平164

7.3.4數組排序165

7.3.5數組分組166

7.3.6數組截取166

7.3.7數組元素替換167

7.3.8通過復制更改數組的新方法167

7.3.9數組合並168

第8章日期與時間169

8.1Date169

8.1.1日期時間字符串格式171

8.1.2比較方法171

8.2Temporal172

8.2.1Now對象173

8.2.2Temporal.PlainDate對象175

8.2.3Temporal.PlainTime對象176

8.2.4Temporal.PlainDateTime對象176

8.2.5Temporal.ZonedDateTime對象177

8.2.6Temporal不變性179

8.2.7日歷系統180

8.2.8ISO 8601擴展181

8.2.9持續時間182

8.3時間計算與處理182

8.3.1四舍五入183

8.3.2時間跨度184

8.3.3時間比較185

8.3.4序列化185

8.3.5Temporal子類實例轉換186

8.3.6與Date互操作186

第9章國際化188

9.1區域標識188

9.2Intl.Collator189

9.3Intl Enumeration190

9.4Intl.NumberFormat190

9.4.1format()和formatToParts()方法191

9.4.2formatRange()和formatRangeToParts()方法193

9.4.3resolvedOptions()和supportedLocalesOf()方法193

9.5Intl.DisplayNames194

9.6Intl.ListFormat195

9.7Intl.Locale196

9.8Intl.PluralRules197

9.9Intl.Segmenter197

9.10Intl.DateTimeFormat198

9.10.1formatToParts()方法200

9.10.2formatRange()方法200

9.11Intl.RelativeTimeFormat201

9.12Intl.DurationFormat202

9.13擴展timeZoneName選項203

9.14國際化數字格式API擴展204

第10章正則表達式206

10.1構造函數與字面量206

10.2RegExp原型上的屬性207

10.2.1exec()方法207

10.2.2test()方法208

10.3Lookbehind208

10.4命名捕獲組209

10.5標誌212

10.5.1標誌獲取器212

10.5.2標誌修改212

10.5.3y標誌213

10.5.4u標誌213

10.5.5v標誌215

10.5.6s標誌216

10.5.7d標誌217

10.5.8模式修飾符217

10.6RegExp.escape()218

第11章Set和Map219

11.1Set221

11.1.1Set構造函數221

11.1.2新增Set方法222

11.2Map225

11.2.1Map構造函數225

11.2.2Set和Map的疊代操作226

11.3WeakSet227

11.4WeakMap227

11.5弱引用229

第12章代理與反射231

12.1代理陷阱與反射231

12.1.1apply陷阱232

12.1.2construct陷阱233

12.1.3defineProperty陷阱234

12.1.4deleteProperty陷阱235

12.1.5get陷阱235

12.1.6set陷阱236

12.1.7has陷阱237

12.1.8getPrototypeOf陷阱238

12.1.9setPrototypeOf陷阱239

12.1.10preventExtensions陷阱239

12.1.11isExtensible陷阱240

12.1.12getOwnPropertyDescriptor陷阱240

12.1.13ownKeys陷阱241

12.1.14代理陷阱小結242

12.2可撤銷代理242

12.3代理陷阱中的約束243

12.3.1apply和construct陷阱的約束243

12.3.2getPrototypeOf陷阱的約束243

12.3.3setPrototypeOf陷阱的約束243

12.3.4isExtensible陷阱的約束244

12.3.5preventExtensible陷阱的約束244

12.3.6get陷阱的約束244

12.3.7set陷阱的約束244

12.3.8defineProperty陷阱的約束244

12.3.9getOwnPropertyDescriptor陷阱的約束245

12.3.10has陷阱的約束245

12.3.11deleteProperty陷阱的約束245

12.3.12ownKeys陷阱的約束245

第13章類246

13.1擁抱類246

13.1.1最小化類提案與安全語法246

13.1.2類的特點247

13.2類語法247

13.3類字段249

13.3.1私有字段250

13.3.2私有字段的限制253

13.3.3靜態字段255

13.4類繼承256

13.4.1繼承目標257

13.4.2子類257

13.4.3構造函數原型鏈259

13.4.4父類覆寫與子類返回260

13.4.5類構造過程260

13.5類靜態塊261

13.6靜態類262

第14章疊代器與生成器264

14.1疊代器264

14.1.1可疊代對象265

14.1.2隱式調用268

14.1.3關閉疊代器269

14.1.4異步疊代271

14.1.5控制疊代272

14.2生成器273

14.2.1生成器函數構造274

14.2.2yield275

14.2.3生成器轉移控制權276

14.2.4生成器中的return277

14.2.5異步生成器278

14.2.6生成器作為默認疊代器279

14.3疊代器助手280

14.3.1map()方法280

14.3.2filter()方法281

14.3.3drop()方法281

14.3.4take()方法281

14.3.5flatMap()方法282

14.3.6reduce()方法282

14.3.7forEach()方法283

14.3.8some()和every()方法283

14.3.9find()方法283

14.3.10toArray()方法284

14.3.11from()方法284

14.4聯合疊代器285

14.5疊代器序列286

第15章異步編程287

15.1Promise288

15.2thenable289

15.3原型方法290

15.3.1then()方法291

15.3.2catch()方法292

15.3.3finally()方法292

15.4工具方法293

15.4.1創建已決議的Promise294

15.4.2Promise.all()方法294

15.4.3Promise.allSettled()方法295

15.4.4Promise.any()方法295

15.4.5Promise.race()方法296

15.4.6Promise.withResolvers()方法296

15.4.7Promise.try()方法297

15.5異步函數297

15.5.1await299

15.5.2forawaitof300

15.5.3頂層await302

第16章新特性305