ECMAScript 2015-2019 完全指南

ECMAScript 是 JavaScript 的基礎標準,通常簡稱為 ES。探索有關 ECMAScript 及其最新功能的所有內容。 TC39 是什麼? ES 版本 ES Next 無論你在哪裡讀到關於 JavaScript 的內容,你總會看到這些術語之一: ES3 ES5 ES6 ES7 ES8 ES2015 ES2016 ES2017 ECMAScript 2015 ECMAScript 2016 ECMAScript 2017 ECMAScript 2018 ECMAScript 2019 這些代表什麼意思呢? 它們都指的是 ECMAScript 這個標準。 ECMAScript 是JavaScript 的基礎標準,通常簡稱為 ES。 除了 JavaScript,其他的語言也實現了 ECMAScript,包括: ActionScript(Flash 腳本語言),由於 Flash 將於 2020 年正式停用,因此其受歡迎程度不斷下降。 JScript(微軟腳本方言),由於當時只有 Netscape 支援 JavaScript,網路瀏覽器戰爭正如火如荼進行中,微軟不得不為 Internet Explorer 建立自己的版本。 但當然最受歡迎和廣泛使用的 ECMAScript 實現是 JavaScript。 為什麼會有這個奇怪的名字?Ecma 国际是一家位於瑞士的標準協會,負責制定國際標準。 當 JavaScript 誕生時,由 Netscape 和 Sun Microsystems 提交給 Ecma,並被命名為 ECMA-262,別名為 ECMAScript。...

ES2016指南

ECMAScript是JavaScript的標準,通常縮寫為ES。了解有關ECMAScript的一切,以及ES2016(又稱ES7)中新增的功能。 Array.prototype.includes() 指數運算子 ES2016,官方稱為ECMAScript 2016,於2016年6月定案。 相較於ES2015,ES2016只是JavaScript的一個小型更新,僅包含兩個功能: Array.prototype.includes 指數運算子 Array.prototype.includes() 此功能引入了一種更易讀的語法,用於檢查數組是否包含元素。 在ES6及更低版本中,要檢查數組是否包含元素,需要使用indexOf函數,它會檢查元素的索引,如果元素不存在,則返回-1。 因為-1被評估為真值,所以無法做以下操作: if (![1,2].indexOf(3)) { console.log('未找到') } 有了ES2016中引入的這個功能,我們可以這樣做: if (![1,2].includes(3)) { console.log('未找到') } 指數運算子 指數運算子**相當於Math.pow(),但將其作為語言的一部分引入,而不是作為庫函數。 Math.pow(4, 2) == 4 \*\* 2 對於需要進行數學運算的JS應用程序來說,這個功能是一個不錯的補充。 **運算子在許多語言中都被標準化,包括Python、Ruby、MATLAB、Lua、Perl等等。

ES2018指南

ECMAScript是JavaScript所基於的標準,通常被簡稱為ES。了解有關ECMAScript的所有信息,以及ES2018(也稱為ES9)中新增的功能。 Rest/Spread 屬性 異步迭代 Promise.prototype.finally() 正則表達式改進 RegExp 正向匹配斷言:基於前置字符進行匹配 Unicode 屬性逸脫\p{…} 和\P{…} 命名捕獲組 正則表達式的s標記 ES2018是ECMAScript標準的最新版本。 它引入了哪些新功能? Rest/Spread 屬性 ES6在處理數組解構時引入了“rest”元素的概念: const numbers = [1, 2, 3, 4, 5] [first, second, ...others] = numbers 以及spread元素: const numbers = [1, 2, 3, 4, 5] const sum = (a, b, c, d, e) => a + b + c + d + e const sumOfNumbers = sum(...numbers) ES2018引入了同樣功能,但針對對象。 Rest 屬性: const { first, second, ...others } = { first: 1, second: 2, third: 3, fourth: 4, fifth: 5 } first // 1 second // 2 others // { third: 3, fourth: 4, fifth: 5 } Spread 屬性允許通過結合在spread運算符之後傳遞的對象的屬性來創建新對象:...

ES6指南

ECMAScript是JavaScript基于的标准,通常缩写为ES。了解关于ECMAScript的一切以及ES6(又称ES2015)中添加的功能。 箭头函数 新的this作用域 Promises 生成器 let和const 类 构造函数 Super 取值器和存值器 模块 导入模块 导出模块 模板字符串 默认参数 展开运算符 解构赋值 增强的对象字面量 更简洁的语法来包含变量 原型 super() 动态属性 for-of循环 Map和Set 新的字符串方法 新的对象方法 ECMAScript 2015,也称为ES6,是ECMAScript标准的基本版本。 与最新的标准修订相隔4年发布,ECMAScript 5.1,它也标志着从版本号转换为年份的变化。 因此不应该称为ES6(尽管每个人都这样称呼),而应该称为ES2015。 ES5的制定历经了10年,从1999年到2009年,因此它也是一次基本而非常重要的语言修订,但现在已经过去了很长时间,没有必要讨论ES5之前的代码是如何工作的了。 由于ES5.1和ES6之间过去了很长时间,因此发布版本中充满了重要的新功能和对JavaScript程序开发中推荐最佳实践的重大变化。要了解ES2015有多么基础,请记住,随着这个版本,规范文档从250页增加到了~600页。 本文描述了最重要的变化。 箭头函数 自引入以来,箭头函数改变了大多数JavaScript代码的外观(和工作原理)。 从视觉上看,这是一个简单而受欢迎的变化,从: const something = function something() { //... } 到 const something = () => { //... } 如果函数体只有一行代码,只需: const something = () => doSomething() 此外,如果只有一个参数,可以写成: const something = param => doSomething(param) 这并不是一个破坏性的变化,常规的function仍然像以前一样工作。 新的this作用域 箭头函数的this作用域是从上下文继承的。...

JavaScript 程式語言介紹

JavaScript 是全球最受歡迎的程式語言之一,現在也廣泛應用於瀏覽器以外的領域。近年來,Node.js 的崛起使得後端開發不再只局限於 Java、Ruby、Python、PHP 等傳統的服務器端語言。現在就一起來了解 JavaScript 吧! 介紹 JavaScript 的基本定義 JavaScript 的版本 介紹 JavaScript 是全球最受歡迎的程式語言之一。 它於 1995 年創建,從其不起眼的開始發展了很長的路程。 作為唯一直接由瀏覽器本地支持的腳本語言,JavaScript 就一直廣泛使用下去。 在開始時,它並不像現在這樣功能強大,主要用於瀏覽器的動畫效果和當時被稱為 DHTML 的奇技淫巧。 隨著 Web 平台需求的不斷增長,JavaScript 不得不隨之發展,以滿足全球最廣泛使用的生態系統的需求。 平台引入了許多功能,瀏覽器 API 也有所增加,而程式語言本身也有了很大的發展。 如今,JavaScript 也廣泛應用於瀏覽器以外的領域。近年來,Node.js 的崛起使得後端開發也得以解鎖,不再只局限於 Java、Ruby、Python、PHP等傳統的服務器端語言。 現在 JavaScript 同時也是許多數據庫和其他應用程式的開發語言,甚至可以開發嵌入式應用程式、移動應用程式、電視應用程式等等。從最初只是瀏覽器中的一門小語言,JavaScript 現在成為了世界上最受歡迎的語言。 JavaScript 的基本定義 JavaScript 是一種具有以下特點的程式語言: 高級語言:它提供抽象層,讓你無需關心程式在運行時的細節。JavaScript 使用垃圾回收機制自動管理記憶體,讓你能夠專注於程式碼本身,而不是管理記憶體位置。它還提供了很多功能,可以處理強大的變數和物件。 動態語言:與靜態程式語言相對,動態語言在運行時執行許多靜態語言編譯時執行的操作。這帶來了一些優點和缺點,也為我們提供了一些強大的功能,比如動態類型、遲綁定、反射、函數式編程、對象的運行時修改、閉包等等。 動態類型:變數不強制要求指定類型。你可以重新將任何類型賦值給一個變數,例如將整數賦值給一個保存字符串的變數。 弱類型:與強類型相對,弱(或鬆散)類型的語言不強制物件類型,這樣更加靈活,但也失去了型別安全和型別檢查的優勢(這正是 TypeScript 和 Flow 試圖改進的地方)。 解釋型語言:它通常被稱為解釋型語言,這意味著在程式運行之前不需要編譯步驟,與 C、Java 或 Go 等語言相對。實際上,瀏覽器在執行 JavaScript 之前會對其進行編譯,以提高性能,但這對你來說是透明的,不需要額外的步驟。 多範式:語言不強制使用特定的編程範式,不像 Java 強制使用物件導向編程,或者 C 強制使用命令式編程。你可以用面向對象的模式編寫 JavaScript,使用原型和 ES6 引入的類語法。你可以使用函數式編程風格來編寫 JavaScript,利用其一級函數的特性,甚至可以使用命令式的編程風格(類似於 C)。 如果你在想,JavaScript 與 Java 沒有任何關聯,這只是個名字選擇上的失誤,但我們不得不接受這個事實。...

JavaScript 符號

一個易於理解 JavaScript 符號的教程 符號是 JavaScript 的原始資料類型之一,同樣還有 字符串、數字、布林值、空值和未定義值。 它在 ECMAScript 2015中被引入,所以只有幾年的歷史。 這是一種非常奇特的資料類型。一旦您創建了一個符號,它的值就會保持為私有且供內部使用。 創建後,只剩下符號參考。 通過調用Symbol()全局工廠函數來創建符號: const mySymbol = Symbol() 每次調用Symbol()我們都會獲得一個新的唯一符號,確保與其他所有符號不同: Symbol() === Symbol() //false 您可以向Symbol()傳遞一個參數,用作符號的描述,僅用於調試目的: console.log(Symbol()) //Symbol() console.log(Symbol('Some Test')) //Symbol(Some Test) 符號通常用於識別對象的屬性。 經常用於避免屬性之間的名稱衝突,因為沒有一個符號等於另一個符號。 或者用於添加不能被用戶有意或無意地覆蓋的屬性。 例如: const NAME = Symbol() const person = { [NAME]: 'Flavio' } person[NAME] //'Flavio' const RUN = Symbol() person[RUN] = () => 'Person is running' console.log(person[RUN]()) //'Person is running' 符號不會被枚舉,這意味著它們不會在運行在對象上的 for..of 或 for..in 循環中被包括。 符號不是 Object.keys() 或 Object.getOwnPropertyNames() 的一部分。...

介紹 ES 模組

ES 模組是 ECMAScript 的模組化標準。儘管 Node.js 已經使用 CommonJS 標準多年,但瀏覽器從未擁有模組系統,因為關鍵的決策,如模組系統,必須首先由 ECMAScript 標準化,然後由瀏覽器實現。 這個標準化過程於 ES6 完成,瀏覽器開始實現這個標準,盡力保持一切保持協調,以相同的方式工作,現在 ES 模組在 Chrome、Safari、Edge 和 Firefox(版本 60 以後)中得到支援。 模組非常強大,因為它可以將各種功能封裝起來,並將這些功能作為庫暴露給其他 JavaScript 檔案。 ES 模組語法 導入模組的語法如下: import package from 'module-name' 而 CommonJS 使用: const package = require('module-name') 模組是一個使用 export 關鍵字將一個或多個值(物件、函式或變數)導出的 JavaScript 檔案。例如,這個模組導出了一個將字串轉換為大寫的函式: export default str => str.toUpperCase() 在這個例子中,模組定義了一個預設導出,所以可以是一個匿名函式。否則它需要一個名稱來區別於其他導出。 現在,任何其他的 JavaScript 模組可以透過導入它來使用 uppercase.js 提供的功能。 可以通過使用具有特殊屬性 type="module" 的 <script> 標籤將模組添加到 HTML 頁面中: <script type="module" src="index.js"></script> 注意:這種模組導入的行為類似於 defer 的腳本加載。請參見 使用 defer 和 async 高效加載 JavaScript...

您需要多少JavaScript知識才能使用Node?

如果您剛剛開始學習JavaScript,您需要多深入地了解這門語言呢? 作為初學者,在您對編程能力充滿信心之前確實很難達到這一點。 在學習編程的過程中,您可能會感到困惑,不知道JavaScript在哪裡結束,Node.js從哪裡開始,反之亦然。 在潛入Node.js之前,我建議您對主要的JavaScript概念有良好的掌握: 語法結構 表達式 類型 變量 函數 this 箭頭函數 迴圈 迴圈和作用域 數組 模板字面量 分號 嚴格模式 ECMAScript 6、2016、2017 掌握了這些概念,您就可以成為一名熟練的JavaScript開發人員,在瀏覽器和Node.js兩個環境中都能夠應對自如。 以下概念也是理解非同步編程的關鍵,而非同步編程是Node.js的一個基本部分: 非同步編程和回調函數 計時器 Promises Async和Await 閉包 事件循環

我如何停止擔心並喜歡上 JavaScript 生態系統

解決 JavaScript 疲勞的旅程 直到幾個月前,我一看到 JavaScript 就會感到焦慮不安。 我完全受困於所謂的 JavaScript 疲勞中,無法擺脫它。 這種情況持續了好幾年。 今天,我喜歡 JavaScript 及其生態系統。 這是怎麼發生的呢? 我從九十年代就開始以某種形式使用 JavaScript,而現在我架上有一些書,看起來在今天顯得非常有趣,書中滿滿的 document.write 陳述。 大概是在 2012-2013 年間,關於 ES6 將會帶來的巨大變化的消息在各處都跳著。 起初,我無法掌握所有事情的進展。我無法一次接受這麼多變化。JavaScript 改變了,但我表示抗拒。學好它已經費了我很多時間,而它卻在我腳下改變。 我在一篇博文的評論中看到一個真實的 點子,它表示“如果你從一開始就一直在這裡的話(對,我就是那個老人),學習現代 JavaScript 會更加困難”: 我會認為,以前(對,我就是那麼老)在那裡是更加困難的 - Tim Tate 我在 2012 年正式開始深入研究 JavaScript 和 Node.js,之前從未經歷過像 ES6 這樣的語言變革。此前一個重大變化發生在 2009 年的 ES5。ES6 徹底改變了一切。它是 JavaScript 的一次巨大改進,每天你都會遇到很多可能出現在 ES6 規範中的新功能,但你真的不知道它們是否真的會包含進去,需要每天跟上進度,其他人在推特上都在談論這些也許會成為下一個大事的東西。 var 被抛棄了。 function 不再存在。 花了很長時間才學會的原型繼承,被類(class)的奧妙所覆蓋。 這只是冰山一角。整個 JavaScript 生態系統在過去幾年中發生了巨大變化。 建置一切事物 正在發生的一個重大轉變是"建置"。 我們從一個非常簡單的東西(使用 script 標籤引入 JavaScript)發展到需要構建步驟將我們的語言編譯到某個難以理解的巨大文件中。起初我強烈抵抗,我站在我的塔樓上,拿著大砲抵抗建置的部隊。 但當 Babel 軍力出現時,我起初更加抵抗,但最終我舉起了白旗,並加入了敵人。 我意識到 Babel 不僅僅是一個引入未來、邊緣功能的時髦庫,而是在未來可以使用作為 ES2017 的工具,同樣地適用於 ES2018、ES2019 等。無路可逃。擁抱未來,Babel 是你的朋友。...