在 2015 的 ES6 後,ECMA 開始一年推新一次 ECMAScript,從此之後較常使用年份來說而不是推行版本了,今天讓我們來認識 ES2016 和 ES2017 吧
ES2016 的功能較少,主要就是兩點
const array = [1, 2, 3, 4, 5];
console.log(array.includes(3)); // true
console.log(array.includes(6)); // false
**
即可快速達成console.log(2 ** 3); // 8
console.log(3 ** 2); // 9
在 ES2017 中主要是針對非同步操作提供了一些不一樣的功能
async function foo() {
console.log('foo 開始');
await new Promise(resolve => setTimeout(resolve, 0));
console.log('foo 結束');
}
async function bar() {
console.log('bar 開始');
await new Promise(resolve => setTimeout(resolve, 0));
console.log('bar 結束');
}
console.log('主程序開始');
foo();
bar();
console.log('主程序結束');
順序依次為 主程序開始 => foo 開始 => bar 開始 => 主程序結束 => foo 結束 => bar 結束
2. Object.values / Object.entries:透過這兩個方法和 ES6 時提出的 Object.keys 可以快速地呈現一個物件的內容
const obj = { a: 1, b: 2, c: 3 };
console.log(Object.keys(obj)); // [a, b, c]
console.log(Object.values(obj)); // [1, 2, 3]
console.log(Object.entries(obj)); // [['a', 1], ['b', 2], ['c', 3]]
// 第一個參數表達要補到總共幾位,第二個參數表達要補什麼
console.log('5'.padStart(3, '0')); // '005'
console.log('5'.padEnd(3, '0')); // '500'
const obj = {
property1: 42,
property2: 'Hello'
};
// 添加一個具有 getter 的屬性
Object.defineProperty(obj, 'property3', {
get: function() { return 'I am property3'; },
enumerable: true
});
const descriptors = Object.getOwnPropertyDescriptors(obj);
console.log(JSON.stringify(descriptors, null, 2));
/*
{
"property1": {
"value": 42,
"writable": true,
"enumerable": true,
"configurable": true
},
"property2": {
"value": "Hello",
"writable": true,
"enumerable": true,
"configurable": true
},
"property3": {
"get": [Function: get],
"set": undefined,
"enumerable": true,
"configurable": true
}
}
*/
property 1 和 2 為一般的屬性,所以描述符都為 true,而 property3 為一個 getter 所以不會有 value 和 writable 的屬性,而因為我們沒有額外設定 set 所以 set 為 undefined