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文字以上の文字列で埋めることも可能)

関連記事

外部リンク