具體描述
産品特色
編輯推薦
√2015年6月新發布的標準,被全球IT企業及前端開發者廣泛擁護、支持。
√由知名博主、前端新知布道者阮一峰老師執筆。
√本書緊跟業界實踐,透徹解讀新增特性、語法,代碼示例簡潔易用。
√把握趨勢,覆蓋ES7,指導JavaScript開發者提升功力,瞭解語言發展動嚮。
內容簡介
ES6(又名 ES2105)是 JavaScript 語言的新標準,2015 年 6 月正式發布後,得到瞭迅速推廣,是目前業界超級活躍的計算機語言。《ES6標準入門(第2版)》是國內僅有的一本 ES6 教程,在前版基礎上增補瞭大量內容——對標準進行瞭徹底的解讀,所有新增的語法知識(包括即將發布的 ES7)都給予瞭詳細介紹,並且緊扣業界開發實踐,給齣瞭大量簡潔易懂、可以即學即用的示例代碼。
《ES6標準入門(第2版)》為中級難度,適閤對 JavaScript 語言或 ES5 已經有所瞭解的讀者,用來提高水平,瞭解這門語言的新發展;也可當作參考手冊,查尋 ES6/ES7 新增的語法點。
作者簡介
阮一峰,著名技術博客作者,JavaScript專傢。專注於網站開發技術,超過十年。暢銷書《黑客與畫傢》《軟件隨想錄》的譯者。
目錄
第1章 ECMAScript 6 簡介 0011.1 ECMAScript 和 JavaScript 的關係0011.2 ECMAScript 的曆史 0011.3 部署進度 0021.4 Babel 轉碼器 003命令行環境 004瀏覽器環境 005Node.js 環境 005在綫轉換 0061.5 Traceur 轉碼器 006直接插入網頁 006在綫轉換 007命令行轉換 008Node.js 環境的用法 0081.6 ECMAScript 7 009第2章 let 和 const 命令 0102.1 let 命令 010基本用法 010不存在變量提升 011暫時性死區 011不允許重復聲明 0122.2 塊級作用域 013為什麼需要塊級作用域 013ES6 的塊級作用域 0132.3 const 命令 0152.4 跨模塊常量 0162.5 全局對象的屬性 017第3章 變量的解構賦值 0183.1 數組的解構賦值 018基本用法 018默認值 0203.2 對象的解構賦值 0213.3 字符串的解構賦值 0243.4 數值和布爾值的解構賦值 0243.5 函數參數的解構賦值 0243.6 圓括號問題 025不能使用圓括號的情況 025可以使用圓括號的情況 0263.7 用途 026第4章 字符串的擴展 0294.1 字符的 Unicode 錶示法 0294.2 codePointAt() 0304.3 String.fromCodePoint() 0314.4 字符串的遍曆器接口 0314.5 at() 0324.6 normalize() 0324.7 includes(),startsWith(),endsWith() 0334.8 repeat() 033目錄XII目錄4.9 padStart(),padEnd() 0344.10 模闆字符串 0344.11 實例:模闆編譯 0374.12 標簽模闆 0384.13 String.raw() 042第5章 正則的擴展 0435.1 RegExp 構造函數 0435.2 字符串的正則方法 0435.3 u 修飾符 0435.4 y 修飾符 0455.5 sticky 屬性 0475.6 flags 屬性 0485.7 RegExp.escape() 048第6章 數值的擴展 0496.1 二進製和八進製數值錶示法 0496.2 Number.isFinite(), Number.isNaN() 0496.3 Number.parseInt(), Number.parseFloat() 0516.4 Number.isInteger() 0516.5 Number.EPSILON 0516.6 安全整數和 Number.isSafeInteger()0526.7 Math 對象的擴展 054Math.trunc() 054Math.sign() 054Math.cbrt() 055Math.clz32() 055Math.imul() 056Math.fround() 056Math.hypot() 057對數方法 057三角函數方法 0586.8 指數運算符 058第7章 數組的擴展 0597.1 Array.from() 0597.2 Array.of() 0617.3 數組實例的 copyWithin() 0627.4 數組實例的 find() 和 findIndex()0637.5 數組實例的 fill() 0637.6 數組實例的 entries()、keys() 和values() 0647.7 數組實例的 includes() 0647.8 數組的空位 0657.9 數組推導 067第8章 函數的擴展 0698.1 函數參數的默認值 069基本用法 069與解構賦值默認值結閤使用 070參數默認值的位置 071函數的 length 屬性 072作用域 073應用 0748.2 rest 參數 0748.3 擴展運算符 075含義 075替代數組的 apply 方法 076擴展運算符的應用 0778.4 name 屬性 0798.5 箭頭函數 080基本用法 080使用注意點 081嵌套的箭頭函數 0838.6 函數綁定 0848.7 尾調用優化 085什麼是尾調用 085尾調用優化 086XIII目錄尾遞歸 087遞歸函數的改寫 0888.8 函數參數的尾逗號 089第9章 對象的擴展 0909.1 屬性的簡潔錶示法 0909.2 屬性名錶達式 0929.3 方法的 name 屬性 0939.4 Object.is() 0949.5 Object.assign() 0959.6 屬性的可枚舉性 0979.7 屬性的遍曆 0989.8 __proto__ 屬性, Object.setPrototypeOf(),Object.getPrototypeOf() 0999.9 對象的擴展運算符 101第 10 章 Symbol 10310.1 概述 10310.2 作為屬性名的 Symbol 10510.3 實例:消除魔術字符串 10610.4 屬性名的遍曆 10710.5 Symbol.for(),Symbol.keyFor() 10910.6 內置的 Symbol 值 110Symbol.hasInstance 110Symbol.isConcatSpreadable 110Symbol.species 111Symbol.match 111Symbol.replace 112Symbol.search 112Symbol.split 112Symbol.iterator 112Symbol.toPrimitive 113Symbol.toStringTag 113Symbol.unscopables 114第 11 章 Proxy 和 Reflect 11611.1 Proxy 概述 11611.2 Proxy 實例的方法 119get() 119set() 121apply() 122has() 123construct() 123deleteProperty() 124defineProperty() 125enumerate() 125getOwnPropertyDescriptor() 126getPrototypeOf() 126isExtensible() 127ownKeys() 127preventExtensions() 128setPrototypeOf() 12811.3 Proxy.revocable() 12911.4 Reflect 概述 12911.5 Reflect 對象的方法 130第 12 章 二進製數組 13312.1 ArrayBuffer 對象 134概述 134ArrayBuffer.prototype.byteLength 135ArrayBuffer.prototype.slice() 135ArrayBuffer.isView() 13612.2 TypedArray 視圖 136概述 136構造函數 136數組方法 138字節序 140BYTES_PER_ELEMENT 屬性 141ArrayBuffer 與字符串的互相轉換 142溢齣 142XIV目錄TypedArray.prototype.buffer 143TypedArray.prototype.byteLength,TypedArray.prototype.byteOffset 143TypedArray.prototype.length 143TypedArray.prototype.set() 144TypedArray.prototype.subarray() 144TypedArray.prototype.slice() 144TypedArray.of() 144TypedArray.from() 14512.3 復閤視圖 14512.4 DataView 視圖 14612.5 二進製數組的應用 148AJAX 148Canvas 148WebSocket 149Fetch API 149File API 149第 13 章 Set 和 Map 數據結構 15113.1 Set 151基本用法 151Set 實例的屬性和方法 152遍曆操作 15313.2 WeakSet 15513.3 Map 157Map 結構的目的和基本用法 157實例的屬性和操作方法 159遍曆方法 160與其他數據結構的互相轉換 16213.4 WeakMap 164第 14 章 Iterator 和 for...of 循環 16614.1 Iterator 的概念 16614.2 數據結構的默認 Iterator 接口 16814.3 調用 Iterator 接口的場閤 17214.4 字符串的 Iterator 接口 17314.5 Iterator 接口與 Generator 函數 17414.6 遍曆器對象的 return()、throw()17514.7 for...of 循環 175數組 175Set 和 Map 結構 177計算生成的數據結構 177類似數組的對象 178對象 179與其他遍曆語法的比較 180第 15 章 Generator 函數 18115.1 簡介 181基本概念 181yield 語句 182與 Iterator 接口的關係 18415.2 next 方法的參數 18515.3 for...of 循環 18715.4 Generator.prototype.throw() 18915.5 Generator.prototype.return() 19315.6 yield* 語句 19415.7 作為對象屬性的 Generator 函數19915.8 Generator 函數的 this 20015.9 Generator 函數推導 20115.10 含義 202Generator 與狀態機 202Generator 與協程 20215.11 應用 203第 16 章 Promise 對象 20816.1 Promise 的含義 20816.2 基本用法 20816.3 Promise.prototype.then() 21116.4 Promise.prototype.catch() 21216.5 Promise.all() 215XV目錄16.6 Promise.race() 21616.7 Promise.resolve() 21616.8 Promise.reject() 21716.9 兩個有用的附加方法 218done() 218finally() 21816.10 應用 219加載圖片 219Generator 函數與 Promise 的結閤 21916.11 async 函數 220第 17 章 異步操作和 async 函數 22117.1 基本概念 221異步 221迴調函數 221Promise 22217.2 Generator 函數 223協程 223Generator 函數的概念 223Generator 函數的數據交換和錯誤處理224異步任務的封裝 22417.3 Thunk 函數 225參數的求值策略 225Thunk 函數的含義 226JavaScript 語言的 Thunk 函數 226Thunkify 模塊 227Generator 函數的流程管理 228Thunk 函數的自動流程管理 22917.4 co 模塊 230基本用法 230co 模塊的原理 230基於 Promise 對象的自動執行 231co 模塊的源碼 232處理並發的異步操作 23317.5 async 函數 234含義 234async 函數的實現 235async 函數的用法 236注意點 236與 Promise、Generator 的比較 238第 18 章 Class 24018.1 Class 基本語法 240概述 240constructor 方法 243實例對象 243name 屬性 244Class 錶達式 245不存在變量提升 245嚴格模式 24618.2 Class 的繼承 246基本用法 246類的 prototype 屬性和 __proto__ 屬性247extends 的繼承目標 248Object.getPrototypeOf() 249super 關鍵字 249實例的 __proto__ 屬性 25018.3 原生構造函數的繼承 25018.4 Class 的取值函數(getter)和存值函數(setter) 25318.5 Class 的 Generator 方法 25418.6 Class 的靜態方法 25418.7 Class 的靜態屬性 25518.8 new.target 屬性 25618.9 Mixin 模式的實現 258第 19 章 修飾器 25919.1 類的修飾 25919.2 方法的修飾 261XVI目錄19.3 為什麼修飾器不能用於函數 26219.4 core-decorators.js 263@autobind 263@readonly 263@override 263@deprecate(彆名 @deprecated) 264@suppressWarnings 26519.5 使用修飾器實現自動發布事件26519.6 Mixin 26619.7 Trait 26719.8 Babel 轉碼器的支持 269第 20 章 Module 27020.1 嚴格模式 27120.2 export 命令 27120.3 import 命令 27220.4 模塊的整體加載 27320.5 module 命令 27420.6 export default 命令 27420.7 模塊的繼承 27620.8 ES6 模塊加載的實質 27720.9 循環加載 278CommonJS 模塊的加載原理 279CommonJS 模塊的循環加載 279ES6 模塊的循環加載 28020.10 ES6 模塊的轉碼 282ES6 module transpiler 282SystemJS 282第 21 章 編程風格 28421.1 塊級作用域 284let 取代 var 284全局常量和綫程安全 285嚴格模式 28521.2 字符串 28521.3 解構賦值 28521.4 對象 28621.5 數組 28821.6 函數 28821.7 Map 結構 28921.8 Class 29021.9 模塊 29121.10 ESLint 的使用 292第 22 章 讀懂 ECMAScript 規格 29322.1 概述 29322.2 相等運算符 29322.3 數組的空位 29522.4 數組的 map 方法 296第 23 章 參考鏈接 29923.1 官方文件 29923.2 綜閤介紹 29923.3 let 和 const 30223.4 解構賦值 30223.5 字符串 30323.6 正則 30423.7 數值 30423.8 數組 30423.9 函數 30523.10 對象 30623.11 Proxy 和 Reflect 30623.12 Symbol 30823.13 二進製數組 30823.14 Set 和 Map 30923.15 Iterator 31023.16 Generator 31123.17 Promise 對象 31223.18 Class 31423.19 Decorator 31423.20 Module 31523.21 工具 316
前言/序言
2012年年底,我開始動手做一個開源項目《JavaScript標準參考教程》(https://github.com/ruanyf/jstutorial)。原來的設想是將自己的學習筆記整理成一本書,哪裏料到,這個項目不斷膨脹,最後變成瞭關於ECMAScript 5及其外圍API的全麵解讀和參考手冊,寫瞭一年多還沒寫完。
那個項目的最後一章就是ECMAScript 6的語法簡介。那一章也是越寫越長,最後我不得不決定,把它獨立齣來,作為一個新項目,也就是您現在看到的這本書。
JavaScript已經是互聯網開發的第一大語言,而且正在變成一種全領域的語言。著名程序員Jeff Atwood甚至提齣瞭一條“Atwood定律”:“所有可以用JavaScript編寫的程序,最終都會齣現JavaScript的版本。”(Any application that can be written in JavaScript will eventually be written in JavaScript.)
ECMAScript正是JavaScript的國際標準,這就決定瞭該標準的重要性。而ECMAScript 6是ECMAScript曆史上最大的一次版本升級,在語言的各個方麵都有極大的變化,即使是熟練的JavaScript程序員,也需要重新學習。由於ES6的設計目標是企業級開發和大型項目,所以可以預料,除瞭互聯網開發者,將來還會有大量應用程序開發者(甚至操作係統開發者)成為ES6的學習者。
我寫作這本書的目標,就是想為上麵這些學習者,提供一本篇幅較短、簡明易懂、符閤中文錶達習慣的ES6教程。它由淺入深、循序漸進,既有重要概念的講解,又有API接口的羅列,便於日後當作參考手冊查閱,還提供大量示例代碼,讓讀者不僅一看就懂,還能舉一反三,直接復製用於實際項目之中。
需要聲明的是,為瞭突齣重點,本書隻涉及ES6與ES5的不同之處,不對JavaScript已有的語法做全麵講解,畢竟市場上這樣的教程已有很多瞭。因此,本書不是JavaScript入門教材,不適閤初學者。閱讀本書之前,需要對JavaScript的基本語法有所瞭解。
我本人也是一個ES6 的學習者,不敢說自己有多高的水平,隻是較早地接觸瞭這個主題,持續地讀瞭許多資料,追蹤標準的進展,做瞭詳細的筆記而已。雖然我盡瞭最大努力,並且原稿在GitHub 上公開後,已經得到瞭大量的勘誤,但是本書的不如人意之處恐怕還是有不少。
阮一峰
2014 年6 月4 日,寫於上海 阮一峰
2014 年6 月4 日,寫於上海
ES6 標準入門(第2版)圖書簡介(詳盡版) 踏入現代 JavaScript 的核心,解鎖前所未有的編程體驗。 《ES6 標準入門(第2版)》並非一本簡單羅列新特性的手冊,而是一本精心打磨的實踐指南,旨在幫助您全麵、深入地理解和運用 ECMAScript 6(又稱 ES2015)帶來的革命性變化。本書以清晰的脈絡、嚴謹的邏輯和豐富的實戰案例,帶領讀者從基礎概念齣發,循序漸進地掌握 ES6 的各項核心特性,讓您在日新月異的 Web 開發領域中遊刃有餘,構建更強大、更靈活、更易於維護的應用程序。 本書的獨特性與價值: 深度解析,而非淺嘗輒止: 我們不滿足於簡單介紹“有什麼”,而是深入剖析“為什麼”和“怎麼用”。本書詳細闡述每個新特性的設計理念、底層機製,以及在實際開發中可能遇到的各種場景和最佳實踐。 由淺入深,循序漸進: 無論您是初涉 JavaScript 的新手,還是有一定經驗但尚未係統掌握 ES6 的開發者,本書都能為您提供一條清晰的學習路徑。從基礎語法到高級概念,每一步都經過精心設計,確保學習的連貫性和有效性。 案例驅動,學以緻用: 理論與實踐相結閤是本書最大的亮點。大量的代碼示例、常見問題分析以及小型的項目實踐,將幫助您將所學知識迅速轉化為實際編碼能力。我們鼓勵讀者動手實踐,在實踐中鞏固理解,發現新的應用可能。 細節打磨,力求準確: 互聯網上關於 JavaScript 的資料繁多,但很多可能存在細節上的偏差或過時。本書力求在每一個細節上做到嚴謹準確,基於最新的 ECMAScript 規範,並結閤實際開發經驗進行解讀,確保您獲得的是最可靠、最前沿的知識。 麵嚮未來,提升競爭力: ES6 已經成為現代 JavaScript 開發的基石,掌握 ES6 不僅是跟上時代潮流,更是提升您在技術市場上競爭力的關鍵。本書將幫助您構建紮實的基礎,為未來更復雜的 Web 技術棧(如 React, Vue, Angular 等)打下堅實基礎。 內容梗概,深入探索: 本書將帶領您係統性地探索 ES6 的各個重要組成部分,以下為核心內容的詳細介紹: 第一部分:現代 JavaScript 的基石——基礎語法革新 塊級作用域(`let` 和 `const`): 深度解析: 深入理解 `var` 在循環和條件語句中帶來的“變量提升”和作用域問題。 `let` 的優勢: 掌握 `let` 如何引入塊級作用域,有效避免變量汙染和意外覆蓋,使代碼邏輯更清晰。 `const` 的應用: 學習 `const` 的不變性並非指內存地址不變,而是綁定關係不變,以及其在常量定義、防止意外修改上的重要作用。 實踐演練: 通過實際代碼對比,展示 `let`/`const` 在循環、函數內部如何優化代碼結構,減少 bug 發生的幾率。 箭頭函數(`=>`): 簡潔語法: 學習箭頭函數更緊湊的函數錶達式寫法,特彆是在迴調函數中的應用。 `this` 的詞法作用域: 這是箭頭函數最核心、最具革命性的特性。本書將詳細解釋箭頭函數如何“捕獲”外層函數的 `this` 值,徹底解決 `this` 指嚮混亂的問題,尤其在事件處理、異步迴調中大放異彩。 與傳統函數的區彆: 明確箭頭函數不能作為構造函數,沒有 `arguments` 對象,不能用 `yield` 等限製,理解其適用場景。 實戰場景: 通過 `setTimeout`、事件監聽器、數組方法(`map`, `filter`, `reduce`)中的應用,展示其便捷性和解決 `this` 問題的能力。 模闆字符串(` `` `): 多行字符串: 告彆煩人的字符串拼接和換行符,直接書寫多行文本。 字符串插值: 掌握 `${expression}` 的強大功能,將變量、錶達式直接嵌入字符串中,生成動態文本,極大簡化字符串構建。 標簽模闆: 探索更高級的標簽模闆功能,通過函數處理模闆字符串,實現字符串的轉義、格式化、國際化等復雜邏輯。 應用示例: 如何使用模闆字符串構建 HTML 片段、日誌信息、動態消息等。 第二部分:麵嚮對象編程的進化——類與模塊 類(`class`): 語法糖的背後: 揭示 `class` 關鍵字的本質是原型鏈的語法糖,理解其背後的繼承和封裝機製。 構造函數與方法: 學習如何定義類的構造函數、實例方法、靜態方法。 繼承(`extends` 和 `super`): 深入理解子類如何繼承父類,`super` 關鍵字在構造函數和方法調用中的作用。 getter 和 setter: 掌握通過 `get` 和 `set` 方法來控製屬性的訪問和修改,實現數據的封裝和校驗。 靜態屬性與方法: 理解類自身擁有的屬性和方法,以及其在工具類、常量集閤中的應用。 實戰: 設計和實現簡單的類,例如用戶類、數據模型類,並進行繼承和實例化。 模塊化(`import` 和 `export`): 解決全局汙染: 深入分析在沒有模塊化之前,JavaScript 代碼如何麵臨命名衝突和依賴管理難題。 ES 模塊規範: 詳細講解 `export`(導齣默認值、命名導齣)和 `import`(導入默認值、命名導入、全部導入、動態導入)的語法和機製。 靜態分析: 理解 ES 模塊的靜態導入導齣特性,這使得構建工具(如 Webpack, Rollup)能夠進行更高效的代碼分割和優化。 應用場景: 如何將大型項目拆分成多個模塊,提高代碼的可讀性、可維護性和可復用性。 CommonJS 和 AMD 的對比: 簡要介紹其他常見的模塊化規範,並說明 ES 模塊的優勢。 第三部分:數據處理與抽象——新特性與實用工具 解構賦值(Destructuring Assignment): 數組解構: 學習如何從數組中提取值,並將其賦值給變量,實現變量的批量聲明和賦值。 對象解構: 掌握如何根據對象的屬性名來提取值,實現靈活的對象屬性賦值。 函數參數解構: 在函數定義中直接解構參數對象,使函數調用更簡潔,參數傳遞更清晰。 剩餘參數(Rest Parameters)與展開語法(Spread Syntax): 剩餘參數: 學習如何用 `...` 收集函數調用中未被顯式命名的剩餘參數。 展開語法: 探索 `...` 如何將可迭代對象(如數組、字符串、對象)的元素展開到新的數組、對象或函數調用中,實現數組閤並、對象閤並、函數參數傳遞的便捷操作。 應用示例: 如何使用解構賦值和展開語法來簡化代碼,例如交換變量、閤並配置對象、剋隆數組等。 Promises(承諾): 解決迴調地獄: 深入理解 Promises 如何優雅地處理異步操作,擺脫層層嵌套的迴調函數。 狀態與鏈式調用: 學習 Promises 的三種狀態(pending, fulfilled, rejected)以及 `.then()`、`.catch()`、`.finally()` 方法的鏈式調用,實現異步流程的順序控製和錯誤處理。 `Promise.all()`、`Promise.race()`、`Promise.any()`、`Promise.allSettled()`: 掌握這些靜態方法如何處理多個 Promise,實現並行執行、競速、任意成功、全部完成等復雜異步場景。 生成異步函數: 將 Promises 的概念與 `async/await` 結閤,進一步簡化異步編程。 `async` 和 `await`: 同步化的異步代碼: 深入理解 `async` 函數如何返迴一個 Promise,以及 `await` 關鍵字如何暫停函數執行,等待 Promise 完成,並獲取其結果,使異步代碼看起來像同步代碼一樣易於閱讀和編寫。 與 Promises 的關係: 強調 `async/await` 是 Promises 的語法糖,是 Promises 更好地被使用的方式。 錯誤處理: 學習如何在 `async` 函數中使用 `try...catch` 來捕獲 `await` 的 Promise 拒絕(reject)情況。 實戰: 重寫基於迴調或 Promise 的異步代碼,展示 `async/await` 的強大威力。 迭代器(Iterators)與生成器(Generators): 迭代器協議: 理解 `Symbol.iterator` 的作用,它是對象可迭代的基礎。 生成器函數(`function`): 學習如何使用 `yield` 關鍵字創建生成器,它是一種特殊的函數,可以暫停執行並返迴一個值,之後可以從暫停處恢復。 惰性求值與按需生成: 探索生成器如何實現惰性求值,隻在需要時生成值,這在處理大數據集、無限序列時非常有用。 應用場景: 如何使用生成器實現自定義的數據結構迭代,以及在異步編程中的高級應用。 Proxy 和 Reflect: Proxy(代理): 學習如何創建一個代理對象,攔截並自定義對象的底層操作(如屬性查找、賦值、函數調用等),實現數據劫持、數據校驗、訪問控製等高級功能。 Reflect(反射): 理解 `Reflect` 對象提供的一係列靜態方法,它們與 Proxy 的方法一一對應,提供瞭更底層的操作接口,方便與 Proxy 協同工作。 應用: 演示 Proxy 和 Reflect 在實現響應式數據綁定、對象狀態管理、權限控製等方麵的強大能力。 第四部分:其他重要特性與最佳實踐 Set 和 Map: Set: 學習 `Set` 的特性——存儲唯一值,以及其 `add()`, `delete()`, `has()`, `size` 等方法,在去重、集閤操作中的應用。 Map: 掌握 `Map` 的特性——鍵值對存儲,鍵可以是任意類型,以及其 `set()`, `get()`, `delete()`, `size` 等方法,與普通對象的對比和優勢。 應用場景: 如何使用 `Set` 和 `Map` 來優化數據結構和算法。 Symbol: 唯一標識符: 理解 `Symbol` 作為一種基本數據類型,其值是唯一的,永不重復,用於創建對象的私有屬性,避免命名衝突。 `Symbol.for()` 和 `Symbol.keyFor()`: 學習如何使用全局注冊錶來創建和查找 Symbol。 `Symbol.iterator`、`Symbol.toStringTag` 等內置 Symbol: 探索這些內置 Symbol 的作用,以及它們如何影響對象的行為。 新的全局對象和方法: `Object.assign()`: 學習如何將一個或多個源對象的所有可枚舉屬性復製到目標對象中,實現淺拷貝和對象閤並。 `Array.from()` 和 `Array.of()`: 掌握如何從類數組對象或可迭代對象創建新數組,以及如何使用 `Array.of()` 根據任意參數創建新數組。 `Object.keys()`, `Object.values()`, `Object.entries()`: 學習如何分彆獲取對象的鍵、值和鍵值對數組。 `Number.EPSILON`, `Number.isInteger()`, `Number.isNaN()` 等: 瞭解這些新的數字常量和方法,用於更精確的數值判斷。 `Promise.resolve()` 和 `Promise.reject()`: 學習如何創建已解決或已拒絕的 Promise。 二進製數據處理: `ArrayBuffer`, `TypedArray`: 簡要介紹處理二進製數據的新方式,瞭解其在處理文件、網絡傳輸等場景下的作用。 Math 和 String 的新方法: `Math.cbrt()` (立方根), `Math.expm1()` (e^x - 1), `Math.log1p()` (ln(1+x)) 等。 `String.prototype.repeat()`, `String.prototype.startsWith()`, `String.prototype.endsWith()`, `String.prototype.includes()` 等。 誰應該閱讀本書? JavaScript 初學者: 想要係統學習現代 JavaScript 編程,打下堅實基礎的開發者。 有一定經驗的 JavaScript 開發者: 希望全麵瞭解和掌握 ES6 新特性,提升代碼質量和開發效率的工程師。 前端工程師: 正在使用或計劃使用主流前端框架(React, Vue, Angular 等),需要深入理解 ES6 語法和概念以更好地運用框架的開發者。 後端 Node.js 開發者: 需要利用 ES6 特性編寫更簡潔、更高效服務器端 JavaScript 代碼的開發者。 對 JavaScript 語言演進感興趣的開發者: 希望瞭解 JavaScript 如何發展,以及未來趨勢的探索者。 掌握 ES6,即是掌握未來。 《ES6 標準入門(第2版)》將成為您學習和掌握 ES6 的最佳夥伴。通過本書,您不僅能夠理解 ES6 的每一個新特性,更能深刻體會其帶來的編程思想的轉變,最終成為一名更優秀的 JavaScript 開發者。現在就開始您的 ES6 之旅,解鎖前所未有的編程能力!