es2017是es6還是es8
es2017是es8。 es全名為“ECMAScript”,是根據ECMA-262標準實現的通用腳本語言,而由2017年6月正式發布的版本,其正式名為ECMAScript2017(ES2017),因其是ECMAScript的第8個版本,因此可簡稱為es8。
本教學操作環境:windows7系統、ECMAScript 6版、Dell G3電腦。
“es”簡介
es全名為“ECMAScript”,是根據ECMA-262 標準實現的通用腳本語言,ECMA -262 標準主要規定了這門語言的語法、型別、語句、關鍵字、保留字、運算子、物件等幾個部分。每次看到 ES 後面跟著數字,是 ECMAScript 的不同版本。
es8/ ES2017
es8全名為ECMAScript8(ECMAScript的第8個版本),是於2017年6月正式發表的JavaScript語言的標準,正式名為ECMAScript 2017(ES2017)。
與ES6 相比,ES8 是JavaScript 的一個小版本,但它仍然引入了非常有用的功能:
字串填充(padStart 和padEnd)
Object.values
Object.entries
Object.getOwnPropertyDescriptors()
函數參數清單和呼叫中的尾隨逗號
Async Functions (異步函數)
共享記憶體和Atomics
字串填充(padStart 和padEnd)
字串填充的目的是向字符字串添加字元,使字串達到指定的長度。
ES2017引入了兩個 String
方法:padStart()
和 padEnd()
。
padStart(targetLength [, padString]) padEnd(targetLength [, padString])
簡單的使用:
Object.values()
這個方法傳回一個包含所有物件自身屬性值的陣列。
使用:
const person = { name: 'Fred', age: 87 } Object.values(person) // ['Fred', 87]
Object.values()
也適用於陣列:
const people = ['Fred', 'Tony'] Object.values(people) // ['Fred', 'Tony']
Object.entries()
#這個方法傳回一個包含所有物件本身屬性的數組,作為[key,value] 對的陣列。
const person = { name: 'Fred', age: 87 } Object.entries(person) // [['name', 'Fred'], ['age', 87]]
Object.entries() 也適用於陣列:
const people = ['Fred', 'Tony'] Object.entries(people) // [['0', 'Fred'], ['1', 'Tony']]
Object.getOwnPropertyDescriptors()
#此方法傳回物件的所有自有(非繼承的)屬性描述子。 JavaScript 中的任何物件都有一組屬性,每個屬性都有一個描述符。 描述子是屬性(property) 的一組特性(attributes),它由以下的子集組成:- value:屬性的值
- writable:true
表示改屬性可以被修改
- get:屬性的getter 函數,在讀取屬性時呼叫
- set:屬性的setter 函數,在屬性設定值時呼叫
- configurable:如果為false
,則不能刪除屬性,也不能更改任何屬性,但值除外
- enumerable:如果屬性是可枚舉的,則為true
Object.getOwnPropertyDescriptors(obj) 接受一個對象,並傳回一個帶有描述符集的物件。
這個方法有什麼用?
ES2015 為我們帶來了Object.assign() 方法,它從一個或多個物件複製所有可列舉的屬性,並傳回一個新物件。
Object.assign() 正確地複製到一個新物件。
const person1 = { set name(newName) { console.log(newName) } }
const person2 = {} Object.assign(person2, person1)
const person3 = {} Object.defineProperties(person3, Object.getOwnPropertyDescriptors(person1))
person1.name = 'x' "x" person2.name = 'x' person3.name = 'x' "x"
person2
丢失了 setter ,因为它没有复制过来。
使用 Object.create()
对浅拷贝对象也有同样的限制。
函数参数列表和调用中的尾随逗号
此功能允许在函数声明和函数调用中使用尾随逗号:
const doSomething = (var1, var2,) => { //... } doSomething('test2', 'test2',)
这一变化将鼓励开发人员停止丑陋的“行以逗号开头”的习惯。
Async Functions (异步函数)
ES2017 引入了 Async Functions (异步函数) 的概念,这是 ECMAScript 版本中引入的最重要的变化。
Async Functions (异步函数) 是 promises 和 generators(生成器) 的组合,以简化 promises 调用,提过代码的可读性,但是不打破 promises 链式调用的限制。
为什么有用
这是对 promises 更高层次的抽象。
当 Promise 在 ES2015 中引入时,它们的目的是解决异步代码的问题,并且他们做到了。但在 ES2015 和 ES2017 相间隔的两年时间里,很明显, Promise 并不是最终的解决方案。
引入 Promise 是为了解决著名的 回调地狱 问题,但它们引入了自己的复杂性和语法复杂性。它们是良好的原语,可以向开发人员公开更好的语法:那就是Async Functions (异步函数)。
一个简单的例子
使用异步函数的代码可以写成:
function doSomethingAsync() { return new Promise((resolve) => { setTimeout(() => resolve('I did something'), 3000) }) } async function doSomething() { console.log(await doSomethingAsync()) } console.log('Before') doSomething() console.log('After')
上面的代码将在浏览器控制台中打印以下内容:
Before After I did something //after 3s
链式调用多个异步函数
异步函数可以非常容易地链式调用,并且语法比简单的 Promise 更具可读性:
function promiseToDoSomething() { return new Promise((resolve)=>{ setTimeout(() => resolve('I did something'), 10000) }) } async function watchOverSomeoneDoingSomething() { const something = await promiseToDoSomething() return something + ' and I watched' } async function watchOverSomeoneWatchingSomeoneDoingSomething() { const something = await watchOverSomeoneDoingSomething() return something + ' and I watched as well' } watchOverSomeoneWatchingSomeoneDoingSomething().then((res) => { console.log(res) })
共享内存 和 Atomics
WebWorkers 用于在浏览器中创建多线程程序。
他们通过事件提供消息传递协议。 从ES2017开始,您可以使用 SharedArrayBuffer
在 Web worker 及其创建者之间创建共享内存数组。
由于我们不知道向共享内存部分写入要花费多少时间来传播,因此 Atomics 是一种在读取值时执行该操作的方法,并且完成了任何类型的写入操作。
【相关推荐:javascript视频教程、编程视频】
以上是es2017是es6還是es8的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

如何使用WebSocket和JavaScript實現線上語音辨識系統引言:隨著科技的不斷發展,語音辨識技術已成為了人工智慧領域的重要組成部分。而基於WebSocket和JavaScript實現的線上語音辨識系統,具備了低延遲、即時性和跨平台的特點,成為了廣泛應用的解決方案。本文將介紹如何使用WebSocket和JavaScript來實現線上語音辨識系

WebSocket與JavaScript:實現即時監控系統的關鍵技術引言:隨著互聯網技術的快速發展,即時監控系統在各個領域中得到了廣泛的應用。而實現即時監控的關鍵技術之一就是WebSocket與JavaScript的結合使用。本文將介紹WebSocket與JavaScript在即時監控系統中的應用,並給出程式碼範例,詳細解釋其實作原理。一、WebSocket技

如何利用JavaScript和WebSocket實現即時線上點餐系統介紹:隨著網路的普及和技術的進步,越來越多的餐廳開始提供線上點餐服務。為了實現即時線上點餐系統,我們可以利用JavaScript和WebSocket技術。 WebSocket是一種基於TCP協定的全雙工通訊協議,可實現客戶端與伺服器的即時雙向通訊。在即時線上點餐系統中,當使用者選擇菜餚並下訂單

如何使用WebSocket和JavaScript實現線上預約系統在當今數位化的時代,越來越多的業務和服務都需要提供線上預約功能。而實現一個高效、即時的線上預約系統是至關重要的。本文將介紹如何使用WebSocket和JavaScript來實作一個線上預約系統,並提供具體的程式碼範例。一、什麼是WebSocketWebSocket是一種在單一TCP連線上進行全雙工

JavaScript和WebSocket:打造高效的即時天氣預報系統引言:如今,天氣預報的準確性對於日常生活以及決策制定具有重要意義。隨著技術的發展,我們可以透過即時獲取天氣數據來提供更準確可靠的天氣預報。在本文中,我們將學習如何使用JavaScript和WebSocket技術,來建立一個高效的即時天氣預報系統。本文將透過具體的程式碼範例來展示實現的過程。 We

JavaScript教學:如何取得HTTP狀態碼,需要具體程式碼範例前言:在Web開發中,經常會涉及到與伺服器進行資料互動的場景。在與伺服器進行通訊時,我們經常需要取得傳回的HTTP狀態碼來判斷操作是否成功,並根據不同的狀態碼來進行對應的處理。本篇文章將教你如何使用JavaScript來取得HTTP狀態碼,並提供一些實用的程式碼範例。使用XMLHttpRequest

用法:在JavaScript中,insertBefore()方法用於在DOM樹中插入一個新的節點。這個方法需要兩個參數:要插入的新節點和參考節點(即新節點將要插入的位置的節點)。

JavaScript是一種廣泛應用於Web開發的程式語言,而WebSocket則是一種用於即時通訊的網路協定。結合二者的強大功能,我們可以打造一個高效率的即時影像處理系統。本文將介紹如何利用JavaScript和WebSocket來實作這個系統,並提供具體的程式碼範例。首先,我們需要明確指出即時影像處理系統的需求和目標。假設我們有一個攝影機設備,可以擷取即時的影像數
