深入理解JavaScript

羅徹麥爾 (Axel Rauschmayer)

  • 出版商: 人民郵電
  • 出版日期: 2016-01-01
  • 定價: $474
  • 售價: 8.5$403
  • 語言: 簡體中文
  • 頁數: 412
  • 裝訂: 平裝
  • ISBN: 7115402604
  • ISBN-13: 9787115402608
  • 相關分類: JavaScript
  • 下單後立即進貨 (約4週~6週)

買這商品的人也買了...

商品描述

 

<內容簡介>

 

是目前Web開發領域非常流行的一種編程語言,得到眾多IT從業人員和編程愛好者的關註。 

本書是一本全面、深入介紹語言的學習指南。本書共分四個部分,第1部分幫助讀者快速入手,掌握基本的編程要點;第2部分介紹的發展和技術背景;第3部分深入探索,介紹了語法、值、運算符、布爾類型、數字、字符串、語句、異常捕獲、函數、變量、對象與繼承、數組、正則表達式、Date、Math、JSON、標準全局變量、編碼和、ECMAScript 5的新特性等內容;第4部分介紹技巧、工具和類庫,幫助讀者更好地運用進行編程。 

本書內容由淺入深,非常適合想要快速學習編程或者深入鑽研的讀者參考。

 

<作者簡介>

 

Axel Rauschmayer專攻和Web開發領域。他在2ality.com寫博客,教Ecmanauten,編輯 Weekly周刊,組織MunichJS用戶組。Axel從1985年開始編程,1995年開始開發web應用。

 

<目錄>

 

第1部分 快速上手 

第1章 基礎 3 

1.1 背景 3 

1.1.1 與ECMAScript 3 

1.1.2 的影響和本質 3 

1.2 語法 4 

1.2.1 語法概述 4 

1.2.2 語句和表達式 5 

1.2.3 分號 5 

1.2.4 註釋 6 

1.3 變量和賦值 6 

1.3.1 賦值 6 

1.3.2 復合賦值運算符 6 

1.3.3 標識符與變量名 6 

1.4 值 7 

1.4.1 原始值和對象 8 

1.4.2 原始值 9 

1.4.3 對象 9 

1.4.4 undefined和null 10 

1.4.5 使用typeof和instanceof對值分類 11 

1.5 布爾值 13 

1.5.1 真值與假值 13 

1.5.2 二元邏輯運算符 14 

1.5.3 等式運算符 14 

1.6 數字 14 

1.7 運算符 15 

1.8 字符串 16 

1.8.1 字符串運算符 16 

1.8.2 字符串方法 17 

1.9 語句 17 

1.9.1 條件語句 17 

1.9.2 循環語句 18 

1.10 函數 19 

1.10.1 函數聲明的提升特性 19 

1.10.2 特殊的變量arguments 20 

1.10.3 參數太多或太少 20 

1.10.4 可選參數 20 

1.10.5 強制參數長度 21 

1.10.6 將arguments轉換為數組 21 

1.11 異常捕獲 21 

1.12 嚴格模式 22 

1.13 變量作用域和閉包 22 

1.13.1 變量是函數作用域的 23 

1.13.2 變量的提升特性 23 

1.13.3 閉包 23 

1.13.4 IIFE模式:引入一個新的作用域 24 

1.14 對象和構造函數 25 

1.14.1 單一對象 25 

1.14.2 任意屬性名 26 

1.14.3 提取方法 26 

1.14.4 方法中的函數 27 

1.14.5 構造函數:對象工廠 28 

1.15 數組 29 

1.15.1 數組字面量 29 

1.15.2 數組方法 30 

1.15.3 遍歷數組 30 

1.16 正則表達式 31 

1.16.1 test()方法:匹配嗎 31 

1.16.2 exec()方法:匹配以及捕獲分組 31 

1.16.3 replace()方法:搜索和替換 31 

1.17 Math 32 

1.18 標準庫的其他功能 32 

 

第2部分 背景 

第2章 為什麽選擇 35 

2.1 可以自由使用嗎 35 

2.2 優雅嗎 36 

2.3 有用嗎 36 

2.3.1 圖形用戶界面 36 

2.3.2 其他技術補充完善 36 

2.4 有什麽好用的工具嗎 37 

2.5 是否足夠快 37 

2.6 是廣泛使用的嗎 38 

2.7 有前途嗎 38 

2.8 結論 38 

第3章 的性質 39 

3.1 古怪和非官方特性 40 

3.2 優雅部分 40 

3.3 影響 41 

第4章 是如何創造出來的 42 

第5章 標準化:ECMAScript 44 

第6章 的歷史里程碑 46 

第3部分 深入 

第7章 的語法 53 

7.1 語法概覽 53 

7.2 註釋 54 

7.3 表達式與語句 54 

7.3.1 表達式 55 

7.3.2 語句 55 

7.4 控制流語句和塊 57 

7.5 使用分號的規則 57 

7.5.1 以塊結束的語句後面沒有分號 58 

7.5.2 空語句 58 

7.5.3 自動分號插入 59 

7.6 合法標識符 60 

7.7 數字字面量的方法調用 62 

7.8 嚴格模式 62 

7.8.1 啟用嚴格模式 62 

7.8.2 嚴格模式:建議與註意事項 63 

7.8.3 嚴格模式中,變量必須被聲明 63 

7.8.4 嚴格模式下的函數 63 

7.8.5 嚴格模式中,設置或者刪除不可改變的屬性會拋出異常 65 

7.8.6 嚴格模式中的不合格標識符不能刪除 65 

7.8.7 嚴格模式中,eval更加簡潔 66 

7.8.8 嚴格模式中禁用的特性 66 

第8章 值 67 

8.1 中的類型體系 67 

8.1.1 類型 67 

8.1.2 靜態與動態 68 

8.1.3 靜態類型與動態類型 68 

8.1.4 靜態類型檢查和動態類型檢查 68 

8.1.5 強制轉換 69 

8.2 原始值和對象 69 

8.2.1 原始值 70 

8.2.2 對象 70 

8.3 undefined和null 72 

8.3.1 undefined和null的出現場景 72 

8.3.2 檢測undefined和null 73 

8.3.3 undefined和null的歷史 74 

8.3.4 修改undefined 75 

8.4 原始值的包裝對象 76 

8.4.1 包裝對象不同於原始值 76 

8.4.2 原始值的包裝與去包裝 76 

8.4.3 原始值從包裝器借調方法 77 

8.5 強制類型轉換 78 

8.5.1 強制類型轉換會隱藏bug 78 

8.5.2 轉換成布爾值、數字、字符串和對象的函數 78 

8.5.3 算法:ToPrimitive()—將值轉換為原始值 80 

第9章 運算符 82 

9.1 運算符和對象 82 

9.2 賦值運算符 82 

9.3 等號運算符:=== 和 == 84 

9.3.1 嚴格相等(===,!==) 84 

9.3.2 普通(寬松)相等(==,!=) 85 

9.3.3 沒有針對==的有效用例 87 

9.4 排序運算符 88 

9.5 加號運算符(+) 89 

9.6 布爾運算符和數字運算符 90 

9.7 特殊運算符 90 

9.7.1 條件運算符(?:) 90 

9.7.2 逗號運算符 91 

9.7.3 void運算符 91 

9.8 通過typeof和instanceof判斷值類型 93 

9.8.1 typeof:判斷原始值 93 

9.8.2 instanceof:檢測對象是否是給定構造函數的實例 95 

9.9 對象運算符 96 

第10章 布爾類型 97 

10.1 轉換成布爾值 97 

10.1.1 手動轉換為布爾值 97 

10.1.2 真值和假值 98 

10.2 邏輯運算符 99 

10.2.1 二元邏輯運算符:與(&&)和或(||) 99 

10.2.2 邏輯與(&&) 100 

10.2.3 邏輯或(||) 100 

10.2.4 邏輯非(!) 101 

10.3 等號運算符、排序運算符 101 

10.4 Boolean函數 102 

第11章 數字 103 

11.1 數字字面量 103 

11.1.1 說明 103 

11.1.2 在字面量上調用方法 104 

11.2 轉換成數字 104 

11.2.1 手動轉換為數字 104 

11.2.2 parseFloat() 105 

11.3 特殊的數字值 106 

11.3.1 NaN 106 

11.3.2 Infinity 108 

11.3.3 兩個0 109 

11.4 數字的內部表示 111 

11.5 處理舍入錯誤 112 

11.6 中的整型 114 

11.6.1 整型的範圍 114 

11.6.2 將整型表示為浮點數字 115 

11.6.3 安全的整型 116 

11.7 轉換成整數 117 

11.7.1 通過Math.floor(),Math.ceil()和Math.round()得到整數 118 

11.7.2 通過定製函數ToInteger()得到整數 119 

11.7.3 通過位運算符得到32位整數 119 

11.7.4 通過parseInt()得到整數 121 

11.8 算術運算符 122 

11.9 位運算符 125 

11.9.1 背景知識 125 

11.9.2 位運算非操作符 126 

11.9.3 二進制位運算符 126 

11.9.4 位運算移位操作符 127 

11.10 Number函數 128 

11.11 Number構造器屬性 128 

11.12 Number原型方法 129 

11.12.1 Number.prototype.toFixed(fractionDigits?) 129 

11.12.2 Number.prototype.toPrecision(precision?) 130 

11.12.3 Number.prototype.toString(radix?) 130 

11.12.4 Number.prototype.toExponential(fractionDigits?) 131 

11.13 用於數字的函數 132 

11.14 本章參考資料 132 

第12章 字符串 133 

12.1 字符串字面量 133 

12.2 字符串字面量中的轉義字符 134 

12.3 字符訪問 135 

12.4 轉換為字符串 135 

12.5 字符串比較 137 

12.6 字符串拼接 137 

12.6.1 合並:加號(+)運算符 137 

12.6.2 合並:拼接字符串數組 138 

12.7 字符串函數 138 

12.8 字符串構造器方法 138 

12.9 字符串length屬性 139 

12.10 字符串原型方法 139 

12.10.1 提取子字符串 139 

12.10.2 字符串的變換 141 

12.10.3 字符串的檢索和比較 142 

12.10.4 支持正則表達式的方法 143 

第13章 語句 145 

13.1 聲明和變量賦值 145 

13.2 循環語句和條件語句的主體 145 

13.3 循環 146 

13.3.1 循環的機制 146 

13.3.2 while 147 

13.3.3 do-while 147 

13.3.4 for 147 

13.3.5 for-in 148 

13.3.6 for each-in 150 

13.4 條件語句 150 

13.4.1 if-then-else 150 

13.4.2 switch 151 

13.5 with語句 153 

13.5.1 語法與語義 153 

13.5.2 with語句已被廢棄 154 

13.5.3 廢棄with的原因 154 

13.6 debugger語句 156 

第14章 異常捕獲 157 

14.1 什麽是異常捕獲 157 

14.2 中的異常捕獲 158 

14.2.1 throw 159 

14.2.2 try-catch-finally 159 

14.2.3 例子 160 

14.3 Error構造器 161 

14.4 棧跟蹤 162 

14.5 實現一個自己的異常構造器 163 

第15章 函數 164 

15.1 中函數的3種形式 164 

15.2 術語:“形參”和“實參” 165 

15.3 定義函數 165 

15.3.1 函數表達式 166 

15.3.2 函數聲明 167 

15.3.3 Function構造器 167 

15.4 函數提升 167 

15.5 函數的名稱 168 

15.6 哪個更好,函數聲明還是函數表達式 168 

15.7 控制函數調用:call(),apply()和bind() 169 

15.7.1 func.apply(thisValue, argArray) 169 

15.7.2 func.bind(thisValue, arg1, ..., argN) 170 

15.8 參數缺失或者超出時的處理 170 

15.8.1 通過索引訪問所有參數:神奇的arguments變量 170 

15.8.2 強制性參數,限制參數數量的最小值 172 

15.8.3 可選參數 173 

15.8.4 模擬參數的引用傳遞 173 

15.8.5 陷阱:非預期的可選參數 174 

15.9 具名參數 175 

15.9.1 具名參數可作為描述信息 175 

15.9.2 可選的具名參數 176 

15.9.3 在中模擬具名參數 176 

第16章 變量:作用域、環境和閉包 177 

16.1 定義變量 177 

16.2 背景知識:靜態性和動態性 177 

16.3 背景知識:變量的作用域 178 

16.4 變量以函數為作用域 179 

16.5 變量聲明的提前 180 

16.6 通過IIFE引入新的作用域 181 

16.6.1 IIFE變體:前綴運算符 182 

16.6.2 IIFE變體:預內置表達式上下文 183 

16.6.3 IIFE變體:傳參的IIFE 183 

16.6.4 IIFE的應用 183 

16.7 全局變量 184 

16.7.1 zui佳實踐:避免創建全局變量 184 

16.7.2 模塊系統可以減少全局變量的引入 185 

16.8 全局對象 185 

16.8.1 跨平臺兼容 186 

16.8.2 window的使用場景 186 

16.9 環境:變量的管理 188 

16.10 閉包:使得函數可以維持其創建時所在的作用域 191 

16.10.1 通過環境來控制閉包 191 

16.10.2 陷阱:不經意間的環境共享 193 

第17章 對象與繼承 195 

17.1 第1層:單一對象 195 

17.1.1 屬性的種類 195 

17.1.2 對象字面量 196 

17.1.3 點運算符(.):通過固定鍵值訪問屬性 197 

17.1.4 特殊的屬性鍵 199 

17.1.5 中括號操作符([]):通過計算出的鍵訪問屬性 199 

17.2 把任意值轉化為對象 201 

17.3 this作為函數和方法的隱式參數 202 

17.3.1 在調用函數時設置 this:call(),apply()和bind() 202 

17.3.2 “用於構造函數的 apply()”詳細闡述瞭如何配合構造函數 

使用apply() 203 

17.3.3 用於構造函數的apply() 204 

17.3.4 缺陷:提取方法時丟失 this 206 

17.3.5 缺陷:方法中的函數會掩蓋 this 207 

17.4 第2層:對象間的原型關系 209 

17.4.1 繼承 209 

17.4.2 覆寫 210 

17.4.3 通過原型在對象間共享數據 210 

17.4.4 獲取和設置原型 211 

17.4.5 特殊屬性 __proto__ 213 

17.4.6 設置和刪除僅影響自有屬性 214 

17.5 遍歷和檢測屬性 215 

17.5.1 列出自有的屬性鍵 215 

17.5.2 列出所有的屬性鍵 216 

17.5.3 檢測屬性是否存在 216 

17.5.4 示例 217 

17.6zui佳實踐:遍歷自有屬性 218 

17.7 訪問器(getter 和 setter) 218 

17.7.1 通過對象字面量定義訪問器 219 

17.7.2 通過屬性描述符定義訪問器 219 

17.7.3 訪問器和繼承 219 

17.8 屬性特性和屬性描述符 220 

17.8.1 屬性特性 220 

17.8.2 屬性描述符 221 

17.8.3 通過描述符獲取和定義屬性 221 

17.8.4 復制對象 223 

17.8.5 屬性:定義與賦值 224 

17.8.6 繼承的只讀屬性不能被賦值 225 

17.8.7 枚舉性:zui佳實踐 225 

17.9 保護對象 226 

17.9.1 防止擴展 226 

17.9.2 封閉 227 

17.9.3 凍結 228 

17.9.4 缺陷:保護是淺層的 229 

17.10 第3層:構造函數—實例工廠 229 

17.10.1 中 new 操作符的實現 231 

17.10.2 術語:兩個原型 231 

17.10.3 實例的 constructor 屬性 232 

17.10.4 instanceof 運算符 234 

17.10.5 實現構造函數的小技巧 237 

17.11 原型屬性中的數據 238 

17.11.1 對於實例屬性,避免使用帶初始值的原型屬性 238 

17.11.2 避免非多態的原型屬性 240 

17.11.3 多態的原型屬性 241 

17.12 保持數據私有性 241 

17.12.1 構造函數環境中的私有數據(Crockford私有模式) 241 

17.12.2 使用標記的鍵的屬性保存私有數據 245 

17.12.3 使用具體化鍵的屬性保存私有數據 246 

17.12.4 通過IIFE保持全局數據私有 247 

17.13 第4層:構造函數之間的繼承 248 

17.13.1 繼承實例屬性 249 

17.13.2 繼承原型屬性 249 

17.13.3 確保instanceof正常工作 250 

17.13.4 覆寫方法 251 

17.13.5 父調用 251 

17.13.6 避免硬編碼父構造函數的名字 252 

17.13.7 示例:構造函數繼承 253 

17.13.8 示例:內建構造函數的繼承層次結構 254 

17.13.9 反模式:原型是父構造函數的實例 254 

17.14 所有對象的方法 254 

17.14.1 轉換為原始值 254 

17.14.2 Object.prototype.toLocaleString() 255 

17.14.3 原型式繼承和屬性 255 

17.15 泛型方法:借用原型方法 256 

17.15.1 通過字面量訪問Object.prototype和Array.prototype 257 

17.15.2 調用泛型方法的例子 258 

17.15.3 類似數組的對象和泛型方法 259 

17.15.4 所有泛型方法列表 261 

17.16 缺陷:Object作為Map使用 263 

17.16.1 缺陷1:繼承影響讀取屬性 263 

17.16.2 缺陷2:覆寫會影響調用方法 265 

17.16.3 缺陷3:特殊屬性__proto__ 265 

17.16.4 字典模式:沒有原型的對象更適合用作映射 266 

17.16.5 zui佳實踐 267 

17.17 備忘錄:對象的使用 267 

第18章 數組 269 

18.1 概述 269 

18.1.1 數組是映射,不是元組 270 

18.1.2 數組也可以具有屬性 270 

18.2 創建數組 270 

18.2.1 數組構造函數 271 

18.2.2 多維數組 271 

18.3 數組索引 272 

18.3.1 操作符in與索引 273 

18.3.2 刪除數組元素 273 

18.3.3 數組索引的細節 273 

18.4 長度 275 

18.4.1 手動增加數組的長度 275 

18.4.2 減少數組的長度 276 

18.4.3 zui大長度 277

18.5 數組中的“空缺” 277 

18.5.1 創建空缺 278 

18.5.2 稀疏數組和密集數組 278 

18.5.3 哪些操作會忽略空缺,而哪些不會 279 

18.5.4 移除數組中的空缺 280 

18.6 數組構造函數 281 

18.7 數組原型方法 281 

18.8 添加和刪除元素(破壞性地) 281 

18.9 排序和顛倒元素順序(破壞性地) 283 

18.9.1 比較數字 284 

18.9.2 比較字符串 284 

18.9.3 比較對象 284 

18.10 合並、切分和連接(非破壞性地) 285 

18.11 值的查找(非破壞性地) 286 

18.12 迭代(非破壞性地) 287 

18.12.1 檢測方法 287 

18.12.2 轉化方法 289 

18.12.3 歸約函數 289 

18.13 缺陷:類數組對象 291 

18.14 zui佳實踐:遍歷數組 291 

第19章 正則表達式 293 

19.1 正則表達式語法 293 

19.1.1 原子:常規 293 

19.1.2 原子:字符類 295 

19.1.3 原子:分組 296 

19.1.4 量詞 296 

19.1.5 斷言 297 

19.1.6 析取(或) 298 

19.2 Unicode 和正則表達式 298 

19.3 創建正則表達式 298 

19.3.1 字面量與構造函數 299 

19.3.2 標識 299 

19.3.3 正則表達式的實例屬性 299 

19.3.4 幾個創建正則表達式的例子 300 

19.4 RegExp.prototype.test:是否存在匹配 300 

19.5 String.prototype.search:匹配位置的索引 301 

19.6 RegExp.prototype.exec:捕獲分組 301 

19.6.1 首次匹配(不設置標識/g) 302 

19.6.2 全部匹配(設置標識 /g) 302 

19.7 String.prototype.match:捕獲分組或返回所有匹配的子字符串 303 

19.8 String.prototype.replace:查找和替換 303 

19.8.1 Replacement 為字符串的情況 304 

19.8.2 當Replacement為函數時 305 

19.9 標識 /g 的一些問題 305 

19.10 提示與技巧 308 

19.10.1 引用文本 308 

19.10.2 陷阱:缺少斷言(例如^、$)的正則表達式可以在任意位置 

匹配 308 

19.10.3 匹配一切或什麽都不匹配 308 

19.10.4 手動實現逆向查找 309 

19.11 正則表達式備忘單 310 

第20章 Date 313 

20.1 Date構造函數 313 

20.2 Date構造函數方法 315 

20.3 Date原型方法 315 

20.3.1 時間單位的getter和setter方法 316 

20.3.2 各種各樣的getter和setter方法 317 

20.3.3 將日期轉換成字符串 317 

20.4 日期和時間格式 319 

20.4.1 日期格式(無時間) 319 

20.4.2 時間格式(無日期) 320 

20.4.3 日期時間格式 321 

20.5 時間值:從1970-01-01開始的毫秒數 321 

第21章 Math 323 

21.1 Math屬性 323 

21.2 數值函數 324 

21.3 三角函數 325 

21.4 其他函數 327 

第22章 JSON 329 

22.1 背景 329 

22.1.1 數據格式 329 

22.1.2 歷史 330 

22.1.3 語法 330 

22.2 JSON.stringify(value, replacer?, space?) 334 

22.2.1 被JSON.stringify()忽略的數據 335 

22.2.2 toJSON()方法 336 

22.3 JSON.parse(text, reviver?) 337 

22.4 通過節點訪問函數轉換數據 338 

22.4.1 JSON.stringify() 339 

22.4.2 JSON.parse() 339 

第23章 標準全局變量 341 

23.1 構造器 341 

23.2 Error構造器 342 

23.3 非構造器函數 342 

23.3.1 文字的編碼和解碼 342 

23.3.2 數值歸類與數值轉換 343 

23.4 通過eval()和new Function()來動態執行代碼 344 

23.4.1 使用eval()執行代碼 344 

23.4.2 通過new Function()執行代碼 346 

23.4.3 eval()與new Function()比較 347 

23.4.4 zui佳實踐 347 

23.4.5 結論 347 

23.5 Console API 348 

23.5.1 Console API在各引擎的標準程度如何 348 

23.5.2 簡單的日誌記錄 349 

23.5.3 檢查和計數 350 

23.5.4 格式化的日誌 350 

23.5.5 性能和時間 352 

23.6 名稱空間和特殊值 353 

第24章 編碼和 354 

24.1 Unicode歷史 354 

24.2 Unicode中的重要概念 354 

24.3 碼位 356 

24.4 Unicode編碼 357 

24.5 源碼和Unicode 359 

24.5.1 內部源碼轉化 359 

24.5.2 源碼外部轉化 359 

24.6 字符串和Unicode 361 

24.6.1 轉義序列 361 

24.6.2 通過轉義引用星際平面的字符 361 

24.6.3 字符長度計算 362 

24.6.4 Unicode正常化 362 

24.7 正則表達式和Unicode 363 

24.7.1 匹配任意的碼元以及任意的碼位 364 

24.7.2 庫 364 

24.7.3 推薦閱讀的章節資源 364 

第25章 ECMAScript 5的新特性 366 

25.1 新特性 366 

25.2 語法的改變 367 

25.3 標準庫的新功能 367 

25.3.1 元編程 367 

25.3.2 新方法 368 

25.3.3 JSON 369 

25.4 兼容舊瀏覽器的小貼士 370 

第4部分 技巧、工具和類庫 

第26章 元編程風格指南 373 

26.1 現有風格指南 373 

26.2 通用技巧 374 

26.2.1 代碼應該具有一致性 374 

26.2.2 代碼應該易於理解 374 

26.3 普遍認可的zui佳實踐 375 

26.3.1 括號風格 376 

26.3.2 推薦字面量而不是構造函數 377 

26.3.3 不要自作聰明 378 

26.3.4 可接受的技巧 379 

26.4 具有爭議的規則 380 

26.4.1 語法 380 

26.4.2 變量 381 

26.4.3 面向對象 382 

26.4.4 其他 383 

26.5 結論 384 

第27章 調試的語言機制 385 

第28章 子類化內置構造函數 386 

28.1 術語 386 

28.2 障礙1:具有內部屬性的實例 386 

28.2.1 障礙1的解決方法 388 

28.2.2 註意 389 

28.3 障礙2:內置的構造函數不能作為方法調用 389 

28.4 另一種解決方案:委托 390 

第29章 JSDoc:生成API文檔 392 

29.1 JSDoc基礎 393 

29.1.1 語法 393 

29.1.2 命名類型 394 

29.2 基礎的標簽 395 

29.3 文檔記錄函數和方法 396 

29.4 行內類型信息(“行內文檔註釋”) 397 

29.5 文檔記錄變量、參數和實例屬性 397 

29.6 文檔記錄類 398 

29.6.1 通過構造函數定義類 399 

29.6.2 通過對象字面量定義類 399 

29.6.3 通過帶有@constructs方法的對象字面量定義類 400 

29.6.4 子類 400 

29.7 其他有用的標簽 401 

第30章 類庫 402 

30.1 shim和polyfill 402 

30.2 四個語言類庫 403 

30.3 ECMAScript的國際化API 403 

30.3.1 ECMAScript的國際化API,第1版 403 

30.3.2 它是怎麽樣的標準呢 404 

30.3.3 我們可以用它做什麽 404 

30.3.4 延伸閱讀 404 

30.4 資源目錄 405 

第31章 模塊系統和包管理器 407 

31.1 模塊系統 407 

31.2 包管理器 408 

31.3 簡單粗暴的模塊實現 408 

第32章 其他工具 410 

第33章 接下來該做什麽 412