1. 程式人生 > >ECMAScript規範第8版(ES2017)已釋出,新功能一覽

ECMAScript規範第8版(ES2017)已釋出,新功能一覽

這裡寫圖片描述

EcmaScript 8或EcmaScript 2017在6月底由TC39正式釋出。 去年,似乎我們在談論EcmaScript。 這不是什麼 目前的標準是每年釋出一個新的ES規範版本一次。 ES6於2015年釋出,ES7於2016年釋出,但ES5釋出後卻有人記得嗎? 這是發生在2009年,在JavaScript的神奇的興起之前。

所以我們將JavaScript的開發變化作為穩定的語言,現在我們需要將ES8輸入到我們的詞典中。

如果你是一個強大的人,深吸一口氣,閱讀規範的網頁或PDF版本。 對於其他的,在本文中,我們將通過程式碼示例來介紹ES8的主要新功能。

字串填充

此部分將兩個函式新增到String物件:padStart&padEnd。
作為他們的名字,這些功能的目的是填充字串的開始或結束,以便生成的字串達到給定的長度。 您可以使用特定的字元或字串填充它,或者僅在預設情況下用空格填充。 以下是函式宣告:

str.padStart(targetLength [, padString])
str.padEnd(targetLength [, padString])

如您所見,這些函式的第一個引數是targetLength,即所得到的字串的總長度。 第二個引數是可選的padString,它是用於填充源字串的字串。 預設值為空格。

'es8'.padStart(2);          // 'es8'
'es8'.padStart(5);          // '  es8'
'es8'.padStart(6, 'woof');  // 'wooes8'
'es8'.padStart(14, 'wow'
); // 'wowwowwowwoes8' 'es8'.padStart(7, '0'); // '0000es8' 'es8'.padEnd(2); // 'es8' 'es8'.padEnd(5); // 'es8 ' 'es8'.padEnd(6, 'woof'); // 'es8woo' 'es8'.padEnd(14, 'wow'); // 'es8wowwowwowwo' 'es8'.padEnd(7, '6'); // 'es86666'

瀏覽器支援情況(MDN)

這裡寫圖片描述

Object.values 和 Object.entries

Object.values方法以與for in迴圈所提供的順序相同的順序返回給定物件自己的列舉屬性值的陣列。 功能的宣告是微不足道的:

Object.values(obj)

obj引數是操作的源物件。 它可以是一個物件或陣列(這是一個索引像[10,20,30] - > {0:10,1:20,2:30})的物件。

const obj = { x: 'xxx', y: 1 };
Object.values(obj); // ['xxx', 1]

const obj = ['e', 's', '8']; // same as { 0: 'e', 1: 's', 2: '8' };
Object.values(obj); // ['e', 's', '8']

// when we use numeric keys, the values returned in a numerical 
// order according to the keys
const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
Object.values(obj); // ['yyy', 'zzz', 'xxx']
Object.values('es8'); // ['e', 's', '8']

Object.values的瀏覽器支援情況(MDN)

這裡寫圖片描述

Object.entries方法以與Object.values相同的順序返回給定物件自己的可列舉屬性[key,value]對的陣列。 功能的宣告是微不足道的:

const obj = { x: 'xxx', y: 1 };
Object.entries(obj); // [['x', 'xxx'], ['y', 1]]

const obj = ['e', 's', '8'];
Object.entries(obj); // [['0', 'e'], ['1', 's'], ['2', '8']]

const obj = { 10: 'xxx', 1: 'yyy', 3: 'zzz' };
Object.entries(obj); // [['1', 'yyy'], ['3', 'zzz'], ['10': 'xxx']]
Object.entries('es8'); // [['0', 'e'], ['1', 's'], ['2', '8']]

Object.entries的瀏覽器支援(MDN)

這裡寫圖片描述

Object.getOwnPropertyDescriptors

getOwnPropertyDescriptors方法返回指定物件的所有屬性描述符。 自己的屬性描述符是直接在物件上定義的,不會從物件的原型繼承。 功能的宣告是:

Object.getOwnPropertyDescriptors(obj)

obj是源物件。 返回的描述符物件結果的可能鍵可配置,可列舉,可寫,獲取,設定和值。

const obj = { 
  get es7() { return 777; },
  get es8() { return 888; }
};
Object.getOwnPropertyDescriptor(obj);
// {
//   es7: {
//     configurable: true,
//     enumerable: true,
//     get: function es7(){}, //the getter function
//     set: undefined
//   },
//   es8: {
//     configurable: true,
//     enumerable: true,
//     get: function es8(){}, //the getter function
//     set: undefined
//   }
// }

描述符資料對於諸如裝飾器的高階功能非常重要。

瀏覽器支援情況(MDN)

這裡寫圖片描述

功能引數列表和呼叫中的逗號

函式引數中的後跟逗號是編譯器在列表末尾新增不必要的逗號時不會引發錯誤(SyntaxError)的能力:

function es8(var1, var2, var3,) {
  // ...
}

作為函式宣告,這可以應用於函式的呼叫:

es8(10, 20, 30,);

此功能的靈感來源於物件文字和陣列文字[10,20,30,]和{x:1,}中的逗號後面。

非同步功能

非同步函式宣告定義了一個非同步函式,它返回一個AsyncFunction物件。 在內部,非同步函式的工作方式與生成器非常相似,但它們不會轉換為生成器函式。

function fetchTextByPromise() {
  return new Promise(resolve => { 
    setTimeout(() => { 
      resolve("es8");
    }, 2000);
  });
}
async function sayHello() { 
  const externalFetchedText = await fetchTextByPromise();
  console.log(`Hello, ${externalFetchedText}`); // Hello, es8
}
sayHello();

函式的呼叫將會導致在2秒之後列印 Hello, es8

console.log(1);
sayHello();
console.log(2);

輸出將會變成:

1 // immediately
2 // immediately
Hello, es8 // after 2 seconds

這是因為非同步函式不會阻塞程式的繼續執行。

注意一個非同步函式總是返回一個promise,一個await關鍵字可能只能在標有async關鍵字的函式中使用。

瀏覽器支援情況(MDN)

這裡寫圖片描述

共享記憶體和原子

共享儲存器時,多個執行緒可以在記憶體中讀取和寫入相同的資料。 原子操作確保可預測的值被寫入和讀取,在下一個操作開始之前完成操作,並且操作不被中斷。 本節介紹一個新的建構函式SharedArrayBuffer和一個具有靜態方法的名稱空間物件Atomics。

Atomic物件是像Math這樣的靜態方法的物件,所以我們不能用它作為建構函式。 此物件中靜態方法的示例有:

  • add / sub — 新增/減去特定位置的值的值
  • and / or / xor — 按位與/按位或/按位異或
  • load—獲取特定位置的值

瀏覽器支援情況(MDN)

這裡寫圖片描述

下一年在ES9 - 提升模板文字限制

使用標記的模板文字(ES6),我們可以像宣告模板解析函式那樣做一些事情,並根據我們的邏輯返回一個值:

const esth = 8;
helper`ES ${esth} is `;
function helper(strs, ...keys) {
  const str1 = strs[0]; // ES
  const str2 = strs[1]; // is
  let additionalPart = '';
  if (keys[0] == 8) { // 8
    additionalPart = 'awesome';
  }
  else {
    additionalPart = 'good';
  }

  return `${str1} ${keys[0]} ${str2} ${additionalPart}.`;
}

返回的值將是→ES 8是真棒。
而對於7的返回值將是→ES 7是好的。

但是對於包含\ u或\ x子字串的模板有一個限制。 ES9將處理這個逸出的問題。 在MDN網站TC39文件中瞭解更多資訊。

瀏覽器支援情況(MDN)

這裡寫圖片描述

結論

JavaScript正在生產中,但它總是在更新。 規範採用新功能的過程非常安排和準備。 在最後階段,這些功能由TC39委員會確認並由核心開發人員實施。 他們大部分已經是Typescript語言,瀏覽器或其他polyfills的一部分,所以你現在可以去嘗試。

相關推薦

ECMAScript規範8(ES2017)釋出功能一覽

EcmaScript 8或EcmaScript 2017在6月底由TC39正式釋出。 去年,似乎我們在談論EcmaScript。 這不是什麼 目前的標準是每年釋出一個新的ES規範版本一次。 ES6於2015年釋出,ES7於2016年釋出,但ES5釋出後卻有人

Fedora 29 Linux發行釋出功能使Web開發人員的工作更方便

Matthew Miller宣佈釋出Fedora 29。這個專案的最新版本是在Fedora Core 1釋出後幾乎整整15年才釋出的,並且可以在多個版本中用於多個體繫結構。 最新版本的Fedora已經發布,為流行的Linux發行版帶來了各種結構變化。 除了構成大量新

Java 11將於本月25日釋出特性一覽

作者:漫畫程式設計來源:漫畫程式設計2017年8月,JCP執行委員會提出將Java的釋出頻率改為

kubernetes 1.6釋出特性一覽

主要更新和釋出的主題 Kubernetes now supports up to 5,000 nodes via etcd v3, which is enabled by default. Kub

Oracle Database 12c DBA文官手冊(8)——12章 實時應用群集

1概述RAC資料庫是高度可用和可擴充套件的。每個節點都必須有各自的Oralce許可和RAC許可。需權衡獲得高可用的代價。1.1硬體配置至少兩個節點,具備服務 器元件基本冗餘特性。共享儲存的內建冗餘可降低建立ASM磁碟組的軟體冗餘量。1.2軟體配置從Oracle10g自帶群集軟體服務CRS,須先在CRS_HOM

Visual Studio 2017上配置OpenGL程式設計指南8開發環境

一直想學習一下OpenGL,買了紅寶書第8版,卻因為工作原因一直沒有時間看,最近利用週末嘗試了一下配置開發環境,遇到了一些坑點,現在記錄下來備用。 第一步:開啟Visual Studio 2017,建立一個空的C++工程 第二步:新建triangles.cpp檔案,並寫入書本例子中的程式碼 /

Oracle Database 12c DBA文官手冊(8)——5章 開發和實現應用程式(續)

5.2、資源管理5.2.1、實現資料庫資源管理需要建立資源計劃、資源消費者組和資源計劃指令。使用資源管理器命令前須建立“未決區域”。針對會話啟用ADMINISTRATOR_RESOURCE_MAANAGER系統許可權將使用者賦給資源消費者組建立資源計劃指令分配相關資源1 切換消費者組2 使用SQL配置檔案5.

Oracle Database 12c DBA文官手冊(8)——5章 開發和實現應用程式

1 調整設計:最佳實踐         1.1做盡可能 少的工作             應該簡化應用

Oracle Database 12c DBA文官手冊(8)——5章 開發和實現應用程序(續)

調整 pac 生成 bms 百分比 列數 改變 應用程序 數據塊 5.2、資源管理5.2.1、實現數據庫資源管理需要創建資源計劃、資源消費者組和資源計劃指令。使用資源管理器命令前須創建“未決區域”。針對會話啟用ADMINISTRATOR_RESOURCE_MAANAGER系

Android開發權威指南(2)新書釋出(免費下載隨書光碟內容包括Android原始碼)

第1章 初識Android平臺 11.1 Android簡介 11.2 Android的制勝法寶 21.3 Android的版本發展歷程 31.3.1 Android 1.5(紙杯蛋糕) 31.3.2 Android 1.6(甜甜圈) 41.3.3 Android 2.1(鬆餅) 41.3.4 Android

Python 3.8.0 正式釋出特性初體驗

北京時間 10 月 15 日,Python 官方釋出了 3.8.0 正式版,該版本較 3.7 版本再次帶來了多個非常實用的新特性。 賦值表示式 PEP 572: Assignment Expressions 新增一種新語法形式::=,又稱為“海象運算子”(為什麼叫海象,看看這兩個符號像不像顏表情),如果你

【執行力決定命】8集《時間管理讓工作和生活井井有條》

職場、手段、執行力、加薪、「音頻原文」http://dwz.cn/6sB211大家好,我是林琳笨,今天跟大家一起分享《時間管理,讓工作和生活井井有條》,這個話題不但和工作有關系,也和生活關系也很大。成功人士是事業有成,家庭照顧的很好,工作之余能陪家人過快樂的家庭生活,這不可能只是運氣,也未必是他非常的努力,大

【C# in depth 】溫故而知(1) (轉)

64位 icm stringbu 值傳遞 關於 ota 現在 函數變量 出發 聲明 本文歡迎轉載,原文地址:http://www.cnblogs.com/DjlNet/p/7192354.html 前言 關於這本書(《深入理解C# 第三版》)的詳細

《IT·效哥談》8期 宇宙那麼大我想去月球看看歷史首位繞月乘客誕生!

9月18日,埃隆·馬斯克旗下美國太空探索技術公司SpaceX昨日公佈了該公司首單私人環月之旅的乘客身份——日本收藏家、企業家同時也是億萬富翁的前澤友作(Yusaku Maezawa),將搭乘“大獵鷹火箭”飛船實現繞月飛行。截至目前,全世界只有24人去過月球,均為宇航員。前澤友作將是人類歷史上首

Spring Boot 2.1.0 釋出7 個重大更新!

1、第三方類庫升級 Hibernate 5.3 Micrometer 1.1 Reactor Californium Spring Data Lovelace Spring Framework 5.1 Tomcat 9 Un

Spring Boot 2.1.0 釋出7 個重大更新你需要了解

Spring Boot 2.1.0 在 10 月底就釋出了,我們來看下 Spring Boot 2.1.0 都更新了什麼,每一個 Java 技術人都值得關注。 棧長其實早就看到了更新了,現在才有時間來更新下。 1、第三方類庫升級 Hibernate 5.3 Micrometer 1.1 Reacto

[轉帖] 紅帽8.0 beta版本釋出 核心版本 4.18

Red Hat Enterprise Linux 8 Beta 現已釋出! https://www.oschina.net/news/101870/red-hat-enterprise-linux-8-beta-released 該版本的構建考慮了生產環境穩定性和開發靈活性。 關於

組合語言()實驗10-12

1.顯示字串 子程式描述: 名稱:show_str 功能:在指定的位置,用指定的顏色,顯示一個用0結束的字串。 引數:(dh)=行號(取值範圍0~24),(dl)=列號(取值範圍0~79), (

DBeaver 社群 5.3 釋出視覺化資料庫管理平臺

   DBeaver 社群版 5.3 釋出了, DBeaver 是一個視覺化通用資料庫管理工具和 SQL 客戶端,支援 MySQL、PostgreSQL、Oracle、DB2、MSSQL、Sybase、Mimer、HSQLDB 與 Derby,以及其它相容 JDBC 的資料庫。

CodeMaid v10.6 釋出Visual Studio 程式碼清理工具

   CodeMaid v10.6 (VS2019 預覽版) 已釋出   CodeMaid v10.6 已經發不在了Visual Studio Marketplace 和GitHub. 此版本滿足了一些功能請求的同時,最顯著的變化就是支援了這周才釋出的 VS