ECMAScript 2017(ES8)特性概述
ECMAScript 2017(ES8)Features
ECMAScript 2017 或 ES8 與 2017 年六月底由 TC39 正式發布,可以在這裡瀏覽完整的版本;而 ES8 中代表性的特徵包括了字元串填充、對象值遍歷、對象的屬性描述符獲取、 函數參數列表與調用中的尾部逗號、非同步函數、共享內存與原子操作等。
字元串填充
ES8 中添加了內置的字元串填充函數,分別為 padStart 與 padEnd,該函數能夠通過填充字元串的首部或者尾部來保證字元串達到固定的長度;開發者可以指定填充的字元串或者使用默認的空格,函數的聲明如下:
str.padStart(targetLength [, padString])
str.padEnd(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"
對象指遍歷
Object.values 函數會返回指定對象的可枚舉的屬性值數組,數組中值順序與 for-in 循環保持一致,函數的聲明為:
Object.values(obj)
首個參數 obj 即為需要遍歷的目標對象,它可以為某個對象或者數組(數組可以看做鍵為下標的對象):
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.entries 方法則會將某個對象的可枚舉屬性與值按照二維數組的方式返回,數組中順序與 Object.values 保持一致,該函數的聲明與使用為:
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"]]
對象的屬性描述符獲取
getOwnPropertyDescriptors 函數會返回指定對象的某個指定屬性的描述符;該屬性必須是對象自己定義而不是繼承自原型鏈,函數的聲明為:
Object.getOwnPropertyDescriptor(obj, prop)
obj 即為源對象,而 prop 即為需要查看的屬性名;結果中包含的鍵可能有 configurable、enumerable、writable、get、set 以及 value。
const obj = { get es8() { return 888; } };
Object.getOwnPropertyDescriptor(obj, "es8");
// {
// configurable: true,
// enumerable: true,
// get: function es8(){}, //the getter function
// set: undefined
// }
函數參數列表與調用中的尾部逗號
該特性允許我們在定義或者調用函數時添加尾部逗號而不報錯:
function es8(var1, var2, var3,) {
// ...
}
es8(10, 20, 30,);
非同步函數
ES8 中允許使用 async/await 語法來定義與執行非同步函數,async 關鍵字會返回某個 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();
console.log(1);
sayHello();
console.log(2);
// 調用結果
1 // immediately
2 // immediately
Hello, es8 // after 2 seconds
共享內存與原子操作
共享內存允許多個線程並發讀寫數據,而原子操作則能夠進行並發控制,確保多個存在競爭關係的線程順序執行。本部分則介紹了新的構造器 SharedArrayBuffer 與包含靜態方法的命名空間對象 Atomics。Atomic 對象類似於 Math,我們無法直接創建其實例,而只能使用其提供的靜態方法:
add /sub - 增加或者減去某個位置的某個值
and / or /xor - 進行位操作
load - 獲取值
via:https://segmentfault.com/a/1190000010156802
TAG:全棧開發者中心 |
※4500mAh+22.5W閃充 iQOO Neo新特性曝光
※iQOO Pro 5G新特性:4800萬三攝+HiFi晶元
※微軟發布Win10 ARM64 SDK:UWP新特性
※Windows 10版本1903中的WSL有什麼新特性?
※iOS 12.2測試版泄露了AirPods 2的新特性
※iOS13 Beta4更新了什麼 iOS13 beta4新特性與升降級全攻略
※iOS13 Beta3更新了什麼?iOS13 beta3測試版新特性與升降級全攻略
※Mate 20系列EMUI 9.1全面開放 體驗7大新特性
※Spark 2.4新特性概述
※Windows Server 2019將至:揭秘新版6大特性
※Windows 10與macOS:18個安全特性大比拼
※Redmi K20多特性曝光 中軸線美背+Game Turbo 2.0
※華為Mate 20 Pro再爆新特性 支持0.25cm超級微距+IP68級防水
※Windows 10 RS5新特性前瞻
※iOS 12曝光2018款iPhoneX新特性 蘋果要上雙卡
※跑分35萬,神舟GeForce RTX2060筆記本四大特性
※華為展示Mate 10 Pro AI特性
※Windows Server 2019新特性:Linux、HCI……
※東芝RC100 M.2 NVMe固態硬碟HMB特性解讀
※2019 GDC:Valve將展示Steam的新特性和更新等