ES2015(ES6)で追加された機能の中から、よく使いそうなものをいくつか試してみます。
ブラウザの対応状況
各ブラウザのES2015の対応状況はこちら
ブラウザによって対応状況が異なるため、実際の案件などで使用する場合、トランスパイラでES2015のコードを変換するなどの対応が必要になります。
今回は試しに使ってみるだけなので、Google Chromeでのみ動作を確認するようにします。
const/let
const/letは変数の宣言に使用します。
それぞれの特徴として、両方とも変数の再宣言はできませんが、constは値の代入が不可、letは値の代入が可能となっています。
基本的にはconstを使い、必要に応じてletを使う形がいいようです。
constで変数の再宣言を行ってみます。
JavaScript
const name = 'サーバルちゃん'; console.log(name); // 出力されない const name = 'アライさん'; // 再宣言できない(エラー) console.log(name); // 出力されない
constで値の代入を行ってみます。
JavaScript
const name = 'サーバルちゃん'; console.log(name); // サーバルちゃん name = 'アライさん'; // 代入できない(エラー) console.log(name); // 出力されない
letで変数の再宣言を行ってみます。
JavaScript
let name = 'サーバルちゃん'; console.log(name); // 出力されない let name = 'アライさん'; // 再宣言できない(エラー) console.log(name); // 出力されない
letで値の代入を行ってみます。
JavaScript
let name = 'サーバルちゃん'; console.log(name); // サーバルちゃん name = 'アライさん'; // 代入できる console.log(name); // アライさん
varでの変数宣言とは違い、ブラケット{}によるブロックスコープが有効です。
JavaScript
var name1 = 'かばんちゃん'; console.log(name1); // かばんちゃん const name2 = 'サーバルちゃん'; console.log(name2); // サーバルちゃん { var name1 = 'フェネック'; console.log(name1); // フェネック const name2 = 'アライさん'; // {}でのブロックスコープが有効 console.log(name2); // アライさん } console.log(name1); // フェネック (値が上書きされている) console.log(name2); // サーバルちゃん (値が上書きされていない)
for文内でのsetTimeout()も正しく動作します。
JavaScript
for (var i = 0; i < 3; i++) { setTimeout(function() { console.log(i); // 3,3,3 }, 500); } for (let i = 0; i < 3; i++) { setTimeout(function() { console.log(i); // 0,1,2 }, 1000); }
アロー関数
関数の宣言を => を使った形に省略することができます。
単一式の場合や引数が1つの場合はさらに省略することもできます。
JavaScript
// 今までの関数 var greet1 = function(name) { return name + 'こんにちは'; }; console.log(greet1('かばんちゃん')); // かばんちゃんこんにちは // ES2015 const greet2 = (name) => { return name + 'こんにちは'; }; console.log(greet2('サーバルちゃん')); // サーバルちゃんこんにちは // {}とreturnを省略 (単一式だけの場合) const greet3 = (name) => name + 'こんにちは'; console.log(greet3('アライさん')); // アライさんこんにちは // ()を省略 (引数が一つの場合) const greet4 = name => name + 'こんにちは'; console.log(greet4('フェネックさん')); // フェネックさんこんにちは
関数の引数
関数の引数に初期値を設定することができます。
JavaScript
function greet(name = 'かばんちゃん') { return name + 'こんにちは'; } console.log(greet('サーバルちゃん')) // サーバルちゃんこんにちは console.log(greet()) // かばんちゃんこんにちは
可変長の引数も設定することができます。
JavaScript
function ppp(ace, leader, ...member) { console.log(ace); // プリンセス console.log(leader); // コウテイ console.log(member); // ["ジェーン", "イワビー", "フルルー"] }; ppp('プリンセス', 'コウテイ', 'ジェーン', 'イワビー', 'フルルー');
Class構文
ES2016からClass構文が正式に実装されました。
JavaScript
class Friends { constructor(name) { this.name = name; } greet() { return this.name + ' こんにちは'; } } const frends = new Friends('かばんちゃん'); console.log(frends.greet()); // かばんちゃんこんにちは
Class構文のデモページ
constructorはインスタンスが生成されたときに実行されるメソッドです。
staticメソッドはインスタンスを生成せずに呼び出すことができます。
JavaScript
class Friends { constructor(name) { this.name = name; } greet() { return this.name + ' こんにちは'; } static speak(name) { return name + ' すごーい!'; } } console.log(Friends.speak('かばんちゃん')); // かばんちゃん すごーい!
extendsキーワードを使うことでクラスの継承もできます。
JavaScript
class Friends { constructor(name) { this.name = name; } greet() { return this.name + ' こんにちは'; } speak() { return this.name + ' すごーい!'; } } class Raccoons extends Friends { speak(){ return this.name + ' なのだ!'; } } const frends = new Raccoons('アライさん'); console.log(frends.greet()); // アライさん こんにちは console.log(frends.speak()); // アライさん なのだ!
オブジェクト
オブジェクトのプロパティのキー名と変数名が同じ場合、入力を省略できます。
JavaScript
const name = 'かばんちゃん'; const type = 'ヒト'; const obj = {name, type}; console.log(obj);
テンプレート文字列
「`」で文字列を囲うことで、${変数名} を使った変数展開ができます。
JavaScript
const name = 'サーバルちゃん'; const greet = `${name} こんにちは`; console.log(greet); // サーバルちゃん こんにちは
【参考サイト】
- 【最低限知っておきたい】ES2015/ES6の基本構文とブラウザ対応状況 | SiTest (サイテスト) ブログ
- ES2015(ECMAScript2015)の文法を覚える – ブログ書くより読むほうがすき
- ES2015(ES6) 入門 – Qiita
コメントが承認されるまで時間がかかります。