コラム:ES2015(ES6)
目次
説明
ここでは、『ES2015 (ES6)』について少し触れます。
初心者の方は、このコラムの内容は無視して構わないです。飛ばして先に進んでください。
JavaScriptはWebブラウザで使用され、発展してきたプログラミング言語です。そのため、各Webブラウザによって、仕様が少しずつ異なっていました。そこで、その中核仕様を抜き出して標準化した『ECMAScript』というものが作られました。
『ES2015 (ES6)』は、ECMASCriptの6番目の版です。新しい仕様が色々と入っており、過去のJavaScriptとは違う文法も増えています。ここではその中から、初心者にも分かりやすいもの、初心者でも見かけるもの、初心者でも覚えておくと便利なものを紹介しておきます。
全ての仕様をきちんと把握するには、『ES2015 (ES6)』をキーワードにして、ネットで詳しい情報を調べるとよいです。
- ES2015(ES6) 入門 - Qiita
- ES2015 (ES6)についてのまとめ - Qiita
- ECMAScript 2015(ECMAScript 6)特集 | HTML5Experts.jp
『let』『const』
『let』『const』は『var』に似ています。『var』は『function() {~}』の中にスコープを持っていましたが、『let』『const』は『{~}』の間をスコープに持ちます。
『let』はローカル変数を作る宣言です。『const』は定数を作る宣言です。定数とは、書き換えできない変数のことです。
以下、『let』のコードの例を示します。
let hoge = 123;
document.write(hoge + "<br>");
{
let hoge = 456;
document.write(hoge + "<br>");
}
document.write(hoge + "<br>");
【結果】
123 456 123
以下、『const』のコードの例を示します。
エラーが出る様子を確認するには、[F12]→「コンソール(Console)」タブで、開発者ツールのコンソールタブを開いておきます。
try {
const PI = 3.14; // 「const」で定義した時には値を代入可能
document.write(PI + "<br>");
PI = -3.14; // 後で値を代入しようとするとエラーになる
document.write(PI + "<br>");
} catch(e) {
document.write(e + "<br>");
}
【結果】
3.14 TypeError: Assignment to constant variable.
『アロー関数』
『アロー関数』関数を簡略化して書く方法です。『=>』という部分がアローの名前の理由です。
以下、まずは複数の引数がある場合です。
// これまでの関数
var fnc = function(a, b) {
return a + b;
};
document.write(fnc(2, 3) + "<br>");
// アロー関数1
var arrow1 = (a, b) => {
return a + b;
};
document.write(arrow1(3, 4) + "<br>");
// アロー関数2(処理がreturnだけなら、省略可能)
var arrow2 = (a, b) => a + b;
document.write(arrow2(4, 5) + "<br>");
次に、引数が1つだけの場合です。引数の『( )』を省略できます。
// これまでの関数
var fnc = function(a) {
return a * a;
};
document.write(fnc(2) + "<br>");
// アロー関数1
var arrow1 = a => {
return a * a;
};
document.write(arrow1(3) + "<br>");
// アロー関数2(処理がreturnだけなら、省略可能)
var arrow2 = a => a * a;
document.write(arrow2(4) + "<br>");
最後は、引数がない場合です。引数がない場合は、引数の『( )』を省略できません。
// これまでの関数
var fnc = function() {
return 3;
};
document.write(fnc() + "<br>");
// アロー関数1
var arrow1 = () => {
return 4;
};
document.write(arrow1() + "<br>");
// アロー関数2(処理がreturnだけなら、省略可能)
var arrow2 = () => 5;
document.write(arrow2() + "<br>");
気を付けなければならないことは、『アロー関数』を使うと、functionを使った際と、thisが指し示す対象が変わります。
これは分かりにくいので実例を示します。
// これまでの関数
var printName = function() {
document.write(this + "<br>");
document.write(this.myName + "<br>");
};
var human = {
myName: "yuu",
print: printName
}
human.print();
// アロー関数
var printNameArrow = () => {
document.write(this + "<br>");
document.write(this.myName + "<br>");
};
var humanArrow = {
myName: "mamoru",
print: printNameArrow
}
humanArrow.print();
【結果】
[object Object] yuu [object Window] undefined
これまでの関数では、その関数(function)がぶら下がっているオブジェクト(呼び出し元のオブジェクト)を『this』とします。
『printName』関数は、『human』オブジェクトの配下なので、『this』は『human』(出力では『[object Object]』)になります。そのため、『this.myName』は『"yuu"』になります。
アロー関数では、その関数が書かれた時点で『this』が決定します。ここでは、関数の外で書いているので、ルートに当たるWindowオブジェクト(出力では『[object Window]』)になります。『Window.myName』は特に定義していないので、『undefined』(未定義)になります。
『テンプレート文字列』
これまで文字列は『"』(ダブルクオーテーション)や『'』(シングルクォーテーション)で囲ってきました。『`』(バッククオート)で囲むと、特殊な文字列を作ることができます。
この『`』(バッククオート)で囲んだ範囲は、改行を行なうことができます。また、『${変数名}』を文字列内に書くことで、プログラムの変数の値を、文字列内に挿入することができます。こうした文字列を、『テンプレート文字列』と呼びます。
var name = "遊";
var like = "手抜き";
var message = \`私の名前は${name}です。
好きなことは${like}です。\`;
document.write(message);
【結果】
私の名前は遊です。 好きなことは手抜きです。
『分割代入』
配列の要素を、まとめて変数に代入することができます。実例を見ると分かりやすいので、さっそく実例を見てみましょう。
var arr = [1, 2, 3]; var [a, b, c] = arr; document.write(a + "<br>"); document.write(b + "<br>"); document.write(c + "<br>");
1 2 3
『関数のデフォルト引数』
関数の引数が指定されていない場合に、デフォルトの値(何も指定されていない場合の初期値)を設定できます。
以下、例です。引数のあとに『 = 5』『 = 10』としている部分が、デフォルトの値の設定です。
var fnc = function(a = 5, b = 10) {
return a * b;
}
document.write(fnc(2, 3) + "<br>");
document.write(fnc(2) + "<br>");
document.write(fnc() + "<br>");
6 20 50
サンプルの入手
以下は、今回出てきたサンプルです。
ZIPでまとめてダウンロード (右クリックから保存してください)
『sample1.html』(サンプル)を表示
プログラムの中身を見たい場合は、それぞれのHTMLファイルをブラウザで開いたあと、右クリックをして『ソースの表示』を選択してください。
メモ帳で、ファイルの中身を見ることができます。





