JS ES6のポイントまとめ

JS(Java Script)は、正式名称:ECMA Script。そのバージョン6:ES6 のポイントをまとめました。

const 定数

別の値を再代入できない。ただし、代入した配列やオブジェクトの中身は変更可能。

const MY_ARRAY = [10, 20, 30];
  MY_ARRAY[0] = 50;           // ok
  MY_ARRAY = [100, 200, 300]  // NG

const OBJ = { x:10 };
  OBJ.x = 100;        // ok
  OBJ = { y:200 };    // NG

定数なのに変更可能なのは、気持ち悪い。数や文字列の代入に使おうかな。

{ブロックスコープ}と let

即時関数が不要に

(function (){
  var x=1; // 即時関数内に変数スコープ限定
}());

変数のスコープが{let x=1;}内に限定されるから。

let 宣言の重複不可

let x=1;
let x=2; // 宣言の重複エラー

連想配列 Map

オブジェクトと異なり

let m = new Map();
m.set('js','Java Script'); // データ格納
m.get('js');        // データ取得
m.size;                    // データ個数を取得

let n = new Map([
 ['js','Java Script'],
 ['json','JavaScript Object Notation']
]);

データの重複なし Set

let s = new Set();
s.add('js');
s.add('js'); // 重複データなので無視される
s.has('js'); // true

forループがシンプル表記に for of

上記 Map を代入した変数 n を for ループ

for(let d of n){
  console.log(d);
}
// 実行結果
 ['js','Java Script']
 ['json','JavaScript Object Notation']

分割代入

let [x, y, z] = ['赤', '白', '黄'];
console.log(y); // 白

... は、演算子

let [a, b, c, ...other] = [1, 2, 3, 4, 5, 6, 7];
console.log(other); // [4,5,6,7]

変数の入れ替え

let a = 'apple',
    b = 'melon';
[b, a] = [a, b];
console.log(a); // melon

引数のデフォルト値

function abc(a=1,b=2){}

可変長引数 ...

function sum(...args){
  let result = 0;
  for(let arg of args){
    result += arg;
  }
  return result;
}
sum(1,2,3); // 6

名前付き引数:引数を{}で囲む

function dialog({
  content,
  height,
  width,
  modeless,
  resizable }){}
dialog({content:'ダイアログ', height:300, width:200, modeless:true, resizable:false})

わかりやすいが、面倒くさい。。

アロー関数:( 引数, )=>{ 本体 }

startsWith, endsWith, includes

console.log( 'abc'.startsWith( 'a' ) ); // true
console.log( 'abc'.endsWith( 'a' ) );   // false
console.log( 'abc'.includes( 'b' ) );   // true

テンプレート文字列:`${}`

`(バッククォート:shift + @キー)

let a='hello', b='world';
console.log( `${a} ${b}.
こんにちは、世界。${1+1}` );

// 結果。変数や式は評価。空白や改行も表示通りに反映
hello world.
こんにちは、世界。2

モジュールのインポート

一般的なオブジェクト指向の import と同じ

// * 全クラス, as 別名
import * as Car from '../carbland';

// carbland.js の中身
export class Toyota {} // 外部利用ok
class Nissan {}        // import 不可

Car.Toyota // インポート先での利用法

デフォルト:1ファイルに1クラスか、1関数のみ

export default class {}
import Abc from './something';
let xyz = new Abc();

Promise 非同期処理

複数の非同期処理を同時実行。総ての処理が完了時、後続処理を実行。といったコードを簡潔に書ける。が、長くなるので略。