ECMAScript 6の新しい構文をつかってみる#1

2014.12.18

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ECMAScript 6の新機能を使ってみよう

ここではECMAScript 6(以下ES6)の実行環境をつくり、動かしてみました。 環境もできたので、ES6の新機能を試してみましょう。

動作環境

今回使用した動作環境は以下のとおりです。

  • OS : MacOS X 10.9.4
  • Node : v0.10.33

ここの記事に従いtraceur-compilerをインストールしておいてください。

ECMAScript 6の新機能をためしてみる

※traceurが実験的にサポートしてるものも含む

Array Comprehension

Array内包表記機能です。配列の中でforループや関数、if分などを使用して処理をさせることができます。 適当な場所にes6.jsファイルを作成し、次のような内容で Array内包を使ってみましょう。

//Array内包
var array = [for (x of [0, 1, 2]) for (y of [0, 1, 2]) x + '' + y];
console.log(array);

//if文(フィルター)も使用可能
var array2 = [for (i of [1,2,3,4,5]) if (i > 3) i]
console.log(array2);

experimentalオプションをつけてtraceurを実行します。 配列内での処理ができていますし、if文でのフィルターもできています。

% traceur --experimental es6.js //experimentalを忘れずに
[ '00', '01', '02', '10', '11', '12', '20', '21', '22' ]
[ 4, 5 ]

Arrow Functions

ScalaとかCoffeeScriptとかでも使うやつです。 いちいちfunction(x)〜とかかかなくてもよくなります。

var square = (x) => {
  return x * x;
};
//引数1つならさらに省略可能
var square2 = x => x * x;
console.log(square(10));
console.log(square2(20));

実行結果は以下のとおり。

% traceur --experimental es6.js
100
400

Block Scoped Binding

いままでのvarキーワードは関数スコープでしたが、今回追加されるletで変数宣言することでブロックスコープを使うことができます。

function blockScope() {
  let a = "hello";//変数aをブロックスコープで定義
  if (true) {
    //スコープは、ifブロック内のみ
    let a = "bye";
    console.log(a);// byeが出力
  }
  console.log(a); //helloが出力
}

constキーワードは、代入後は二度と値を変更できない定数を定義します。こちらもブロックスコープです。

const a = "hello";
console.log(a);
a = "bye"; //error.a is read-only

Computed Property Names

プロパティのキー部分で演算可能に。

var x = 0;
var obj = {
  ["prop_" + x]: 'a',
  ["prop_" + (x + 1)]: 'b',
  ["prop_" + (x + 2)]: 'c'
};

console.log(obj);
%traceur --experimental es6.js 
{ prop_0: 'a', prop_1: 'b', prop_2: 'c' }

Default Parameters

関数の引数にデフォルトパラメータが指定できるようになりました。

function increment(x, y = 1) {
  return x += y;
}

console.log(increment(10,5)); //15
console.log(increment(20)); //21

まとめ

とりあえずES6の構文をいくつか紹介しました。 上記以外にもまだまだいっぱい新しい機能があります。それについてはまたのちほど。