ECMAScript 2016/2017の新機能
2021/02/14更新
目次
概要
新機能の大幅な追加が行なわれたECMAScript 2015の登場後、さらに、ECMAScript 2016(ES7、ES2016)が2016年に、ECMAScript 2017(ES8、ES2017)が2017年に発表された。ES2016とES2017で追加された機能についてまとめておく。
進化した記法
冪乗演算子
ES2016から冪乗演算子a ** b
が使えるようになった。従来のMath.pow(a, b)
も引き続き使えるが、a ** b
の方が圧倒的に見やすいだろう。
let a = 2; let b = a ** 4; // aの4乗 a **= 4; // 複合代入も可能 // 単項の+や-を左側に使う場合は、()が必須となっているので注意。 a = -(3 ** 2); // -9 a = (-3) ** 2; // 9 a = -3 ** 2; // エラー
async/await
Promise
を使った非同期処理をさらに簡潔に記述するための記法がES2017で追加された。Promiseによる非同期処理を参照。
関数引数の末尾カンマ
ES2017より、関数定義や呼び出しの際の引数リストの末尾のカンマが許容される(無視される)ようになった。
const myFuncA = function(a, b, c, d,) { myFuncB(a, b, c, d,); }; // 上記の「d」の後ろにあるようなカンマが許容される。
なお、オブジェクトリテラルでの末尾カンマは、ES5から許容されている。
追加されたメソッド
Object
Object
には、オブジェクトの列挙に使えるObject.values()
とObject.entries()
がES2017で追加された。なお、キーを列挙するObject.keys()
は、ES5から追加されている。
const obj = { hoge: 1234, fuga: 5678 }; // 値の列挙 const values = Object.values(obj); // [1234, 5678] // キー/値ペアの列挙 const entries = Object.entries(obj); // [['hoge', 1234], ['fuga', 5678]] // for-of文での使用 for (const [key, val] of Object.entries(obj)) { console.log(`${key} = ${val}`); }
従来からあるObject.getOwnPropertyDescriptor()
と同様にして、全てのプロパティの定義情報を一度に取得できるObject.getOwnPropertyDescriptors()
も登場した。
Array
Array
オブジェクトには、ES2016でincludes()
が追加された。
// 要素が含まれるかどうか console.log([1, 2, 3, 4, 5].includes(5)); // true console.log([1, 2, 3, 4, 5].includes(6)); // false
String
String
オブジェクトには、文字埋めができるpadStart()
とpadEnd()
がES2017で追加された。
// パディング const str1 = '123'.padStart(6, '0'); // '000123'(0埋めに便利) const str2 = '123'.padEnd(6, '0'); // '123000' const str3 = 'x'.padStart(6); // ' x'(第2引数を省略するとスペースで埋める) const str4 = 'x'.padStart(6, 'abc'); // 'abcabx'(2文字以上の文字列で埋めることも可能)