第 1 章 二十年來的 JavaScript 1
1.1 網頁中的代碼1
1.1.1 新鮮的玩意兒 1
1.1.2 寫在網頁中的第一段代碼 2
1.1.3 最初的價值 3
1.2 用 JavaScript 來寫瀏覽器上的應用5
1.2.2 Flash 的一席之地 7
1.2.3 RWC 與 RIA 之爭 8
1.3 沒有框架與庫的語言能怎樣發展呢 10
1.3.1 做一個框架10
1.3.2 重寫框架的語言層 .13
1.3.3 富瀏覽器端開發(RWC)與 AJAX14
1.4 語言的進化16
1.4.1 Qomo 的重生16
1.4.2 QoBean 是對語言的重新組織 .17
1.4.3 JavaScript 作為一門語言的進化18
1.5 大型繫統開發20
1.5.1 框架與架構是不同的 .20
1.5.2 大型繫統與分布式的環境 21
1.5.3 劃時代的 ES6.23
1.6 為 JavaScript 正名 24
1.6.1 JavaScript .25
1.6.1.1 Core JavaScript26
1.6.1.2 SpiderMonkey JavaScript 27
1.6.1.3 JScript .27
1.6.2 ECMAScript 28
1.7 JavaScript 的應用環境29
1.7.1 宿主環境 30
1.7.2 外殼程序
第 2 章 JavaScript 的語法 36
2.1 語法綜述 36
2.1.1 標識符所綁定的語義.37
2.1.2 識別語法錯誤與運行錯誤38
2.2 JavaScript 的語法:聲明 .40
2.2.1 變量的數據類型.40
第 2 章 JavaScript 的語法 . 36
2.1 語法綜述36
2.1.1 標識符所綁定的語義 37
2.1.2 識別語法錯誤與運行錯誤 .38
2.2 JavaScript 的語法:聲明40
2.2.2 變量聲明 45
2.2.4 其他聲明 53
2.2.4.1 常量聲明 ..53
2.2.4.2 符號聲明 ..54
2.2.4.3 函數聲明 ..55
2.3 JavaScript 的語法:表達式運算 ......56
2.3.1 一般表達式運算 .....59
2.3.2 比較運算 61
2.3.3 賦值運算 67
2.3.4 函數相關的表達式 .6
2.3.5 特殊作用的運算符 .72
2.3.6 運算優先級 ...76
2.4 JavaScript 的語法:語句 ....78
2.4.1 表達式語句 ...80
2.4.2 變量聲明語句 ..86
2.4.3 分支語句 87
2.4.4 循環語句 89
2.4.5 流程控制:一般子句 ....91
2.4.6 流程控制:異常 .....96
2.5 JavaScript 的語法:模塊 ....97
2.5.1 模塊的聲明與加載 .98
2.5.2 名字空間的特殊性 ......101
2.6 嚴格模式下的語法限制 ...105
2.6.1 語法限制 .....106
2.6.2 執行限制 .....108
2.6.3 嚴格模式的範圍 ... 110
2.7 運算符的二義性 ..... 112
2.7.1 加號“+”的二義性 .... 114
2.7.2 括號“( )”的二義性 ... 114
2.7.3 冒號“:”與標簽的二義性 116
2.7.4 大括號“{ }”的二義性 ..... 117
2.7.5 逗號“,”的二義性 .....122
2.7.6 方括號“[ ]”的二義性 ......123
2.7.7 語法設計中對二義性的處理.....127
第 3 章 JavaScript 的面向對像語言特性 . 130
3.1 面向對像編程的語法概要 ......130
3.1.1 對像聲明與實例創建 ..132
3.1.2 使用類繼承體繫 ...141
3.1.3 對像成員 .....147
3.1.4 使用對像自身 157
3.1.5 符號 ......158
3.2 JavaScript 的原型繼承 ......161
3.2.1 空(null)與空白對像(empty) ......161
3.2.2 原型鏈的維護 171
3.2.3 原型繼承的實質 ...175
3.3 JavaScript 的類繼承 179
3.3.1 類是靜態的聲明 ...179
3.3.2 super 是全新素 ....181
3.3.3 類是用構造器(函數)來實現的 189
3.3.4 父類的默認值與 null 值 .....192
3.4 JavaScript 的對像繫統 ......196
3.4.1 封裝與多態 .196
3.4.2 屬性 ......201
3.4.3 構造對像繫統的方法 ..206
3.4.4 內置的對像繫統 ...214
3.4.5 特殊效果的繼承 ...226
3.5 可定制的對像屬性 .229
3.5.1 屬性描述符 .230
3.5.2 定制對像屬性 233
3.5.3 屬性表的狀態 239
3.6 運行期編程繫統 ......242
3.6.1 關於運行期侵入 ...243
3.6.2 類類繼承 ......257
3.6編程模型 .266
第 4 章 JavaScript 語言的結構化 ..... 269
4.1 概述 ....269
4.1。1 命令式語言 .270
4.1.2 面向對像語言 275
4.1.3 再論語言的分類 ...281
4.1.4 JavaScript 的語源 ..283
4.2 基本素 .....284
4.2.1 標識符 ..285
4.2.2 表達式 ..286
4.2.3 語句 ......288
4.2.4 模塊 ......289
4.2.5 組織的原則 .290
4.3 聲明 ....294
4.3.1 聲明名字 .....295
4.3.2 確定性 ..296
4.3.3 頂層聲明 .....297
4.4 語句與代碼分塊 .....300
4.4.1 塊 ...301
4.4.2 塊與語句的語法結構 ..303
4.4.3 塊與聲明語句 309
4.4.4 塊與語句的值 312
4.5 組織形式分塊的方法 318
4.5.1 詞法作用域 .319
4.5.3 詞法作用域之間的相關性 .336
4.5.4 執行流程變更的內涵 ..337
4.6 層次結構程序設計 .340
4.6.1 屬性的可見性 341
4.6.2 多態的邏輯 .343
4.6.3 私有作用域的提出 ......347
4.7 歷史遺產:變量作用域 ...349
4.7.1 變量作用域 .350
4.7.2 變量的特殊性與變量作用域的關繫 353
4.8 私有屬性與私有字段的紛爭356
4.8.1 私有屬性的提出 357
4.8.2 從私有屬性到私有成員 361
4.8.3 “類字段”提案的實現概要364
4.8.4 “私有屬性”提案的設計與提議 368
4.8.5 “私有屬性”提案的實現 .373
第 5 章 JavaScript 的函數式語言特性 ..... 381
5.1 概述 ....381
5.1.1 從代碼風格說起 ...382
5.1.2 為什麼常見的語言不贊同連續求值 ...383
5.1.3 函數式語言的淵源 ......384
5.2 從運算式語言到函數式語言...386
5.2.1 JavaScript 中的幾種連續運算 ...386
5.2.2 如何消滅語句 391
5.2.3 運算式語言 .394
5.2.4 重新認識函數 397
5.2.5 函數式語言 .401
5.3 JavaScript 中的函數 405
5.3.1 參數 ......405
5.3.2 函數 ......418
5.3.3 函數的數據性質 ...431
5.3.4 函數與邏輯結構 ...439
5.4 函數的行為 ......443
5.4.1 構造 ......444
5.4.2 調用 ......448
5.4.3 方法調用 .....455
5.4.4 迭代 ......461
5.4.5 生成器中的迭代 ...466
5.5 閉包 ....475
5.5.1 閉包與函數實例 ...476
5.5.2 閉包的使用 .481
5.5.3 與閉包類似的實例化環境 .487
5.5.4 與閉包相關的一些特性 .....496
第 6 章 JavaScript 的動態語言特性 . 506
6.1 概述 ....506
6.1.1 動態數據類型的起源 ..507
6.1.2 動態執行繫統 507
6.1.3 腳本繫統的起源 ...509
6.1.4 腳本隻是表現形式 ......510
6.2 動態類型:對像與值類型之間的轉換 .512
6.2.1 包裝類:面向對像的妥協 .512
6.2.2 從對像到值 .520
6.2.3 顯式的轉換 .529
6.3 動態類型:值類型的轉換 ......532
6.3.1 值運算:類型轉換的基礎 .532
6.3.2 值類型之間的轉換 ......535
6.3.3 值類型之間的顯式轉換 .....540
6.4 動態類型:對像與數組的動態特性 .....545
6.4.1 關聯數組與索引數組 ..545
6.4.2 索引數組作為對像的問題 .546
6.4.3 類數組對像:對像作為索引數組的應用 ..552
6.4.4 其他 ......554
6.5 重寫 ....555
6.5.1 標識符的重寫及其限制 .....555
6.5.2 原型重寫 .....567
6.5.3 構造器重寫 .569
6.5.4 對像成員的重寫 ...573
6.5.5 引擎對重寫的限制 ......578
6.6 動態執行 ...582
6.6.1 eval()作為函數名的特殊性 582
6.6.2 eval()在不同上下文環境中的效果 .....584
6.6.3 Eval 環境的獨特性 ......586
6.6.4 動態執行過程中的語句、表達式與值 ......593
6.6.5 序列化與反序列化 ......595
6.6.6 eval 對作用域的影響 ...600
6.6.7 其他的動態執行邏輯 ..601
6.7 動方法調用(call、apply 與 bind) .605
6.8 通用執行環境的實現 615
6.8.1 通用 DSL 的模型 ..616
6.8.2 實現 ECMAScript 引擎 ......624
6.8.3 與 DSL 的概念整合 .....635
第 7 章 JavaScript 的並行語言特性 . 638
7.1 概述 ......638
7.1.1 並行計算的思想 ...638
7.1.2 並行程序設計的歷史 ..642
7.1.3 並行語言特性在 JavaScript 中的歷史 645
7.2 Promise 的核心機制 ..647
7.2.1 Promise 的核心過程 ....647
7.2.2 Promise 類與對像的基本應用 ..654
7.2.3 Promise 的子類 .....663
7.2.4 執行邏輯 .....666
7.2.4.1 任務隊列 666
7.2.4.2 執行棧 ....667
7.3 與其他語言特性的交集 ...668
7.3.1 與函數式特性的交集:異步的函數 ...669
7.3.2 與動態特性的交集 ......677
7.3.3 對結構化特性帶來的衝擊 .683
7.3.3.4 異步方法與存取器 .....687
7.4 JavaScript 中對並發的支持 .....690
7.4.1 Agent、Agent Cluster 及其工作機制 ..691
7.4.2 SharedArrayBuffer 698
7.4.3 Atomics.701
7.5 在分布式網絡環境中的並行執行 ..706
7.5.2 構建一個集群環境 ......709
7.5.3 使用 PEDT 執行行任務 .713
7.5.4 可參考的意義 718
附錄 A 術語表 ... 719
附錄 B 參考書目 ...... 723
附錄 C 圖表索引 ...... 725
附錄 D 本書各版次主要修改 .. 731