ECMAScript 2017

JavaScript 命名約定始于 ES1、ES2、ES3、ES5 和 ES6。

但是,ECMAScript 2016 和 2017 未被稱為 ES7 和 ES8。

自 2016 年以來,新版本按年份命名(ECMAScript 2016/2017/2018)。

ECMAScript 2017 中的新特性

本章介紹 ECMAScript 2017 的新特性:

  • JavaScript 字符串填充
  • JavaScript Object.entries
  • JavaScript Object.values
  • JavaScript 異步函數
  • JavaScript 共享內存

JavaScript 字符串填充

ECMAScript 2017 添加了兩個 String 方法:padStartpadEnd,以支持在字符串的開頭和結尾進行填充。

實例

let str = "5";
str = str.padStart(4,0);
// 結果是: 0005

親自試一試

實例

let str = "5";
str = str.padEnd(4,0);
// 結果是: 5000

親自試一試

Internet Explorer 不支持字符串填充。

Firefox 和 Safari 是第一批支持 JavaScript 字符串填充的瀏覽器:

Chrome IE Firefox Safari Opera
Chrome 57 Edge 15 Firefox 48 Safari 10 Opera 44
2017 年 3 月 2017 年 4 月 2016 年 8 月 2016 年 9 月 2017 年 3 月

JavaScript 對象條目

ECMAScript 2017 向對象添加了新的 Object.entries 方法。

Object.entries() 方法返回對象中鍵/值對的數組:

實例

const person = {
  firstName : "Bill",
  lastName : "Gates",
  age : 50,
  eyeColor : "blue"
};
document.getElementById("demo").innerHTML = Object.entries(person);

親自試一試

Object.entries() 使循環中使用對象變簡單了:

實例

const fruits = {Bananas:300, Oranges:200, Apples:500};
let text = "";
for (let [fruit, value] of Object.entries(fruits)) {
text += fruit + ": " + value + "
";
}

親自試一試

Object.entries() 也使得將對象轉換為映射變得簡單:

實例

const fruits = {Bananas:300, Oranges:200, Apples:500};
const myMap = new Map(Object.entries(fruits));

親自試一試

Chrome 和 Firefox 是第一批支持 Object.entries 的瀏覽器:

Chrome IE Firefox Safari Opera
Chrome 47 Edge 14 Firefox 47 Safari 10.1 Opera 41
2016 年 6 月 2016 年 8 月 2016 年 6 月 2017 年 3 月 2016 年 10 月

JavaScript 對象值

Object.values 類似 Object.entries,但返回對象值的單維數組:

實例

const person = {
  firstName : "Bill",
  lastName : "Gates",
  age : 50,
  eyeColor : "blue"
};
document.getElementById("demo").innerHTML = Object.values(person);

親自試一試

Firefox 和 Chrome 是第一批支持 Object.values 的瀏覽器:

Chrome IE Firefox Safari Opera
Chrome 54 Edge 14 Firefox 47 Safari 10.1 Opera 41
2016 年 10 月 2016 年 8 月 2016 年 6 月 2017 年 3 月 2016 年 10 月

JavaScript Async 函數

等待超時

async function myDisplay() {
  let myPromise = new Promise(function(myResolve, myReject) {
    setTimeout(function() { myResolve("I love You !!"); }, 3000);
  });
  document.getElementById("demo").innerHTML = await myPromise;
}
myDisplay();

親自試一試

Firefox 和 Chrome 是第一批支持異步 JavaScript 函數的瀏覽器:

Chrome IE Firefox Safari Opera
Chrome 55 Edge 15 Firefox 52 Safari 11 Opera 42
2016 年 12 月 2017 年 4 月 2017 年 3 月 2017 年 9 月 2016 年 12 月