LoginSignup
17
16

More than 5 years have passed since last update.

BabelのLearn ES6を学んでいく(2

Last updated at Posted at 2015-04-09

https://babeljs.io/docs/learn-es6/#default-rest-spread
前回に引き続きBabelのLearn ES6で新しいJavaScriptを学んでいきます。なにか間違いありましたらご指摘いただけると助かります。

Default + Rest + Spread

  • 引数にデフォルト値を指定できますfunction f(x=0)
  • 可変長引数がサポートされますfunction f(x, ...y)
  • 呼び出し時、引数に配列をマッチングできますfunction f(x,y,z){}; f(...[1,2,3])
  • 例:http://www.es6fiddle.net/i89ltam3/

Let + Const

  • 新しい宣言文が追加されます
  • let : varと異なり同スコープ中で再宣言できません
  • const : 定数であり再代入できません
//可能
var x=0;
var x=1:

//不可
let x=0;
let x=1:

//不可
const x=0
x=1

Iterators + For..Of

  • 自作可能なイテレータが導入されました
  • for(var x of iterable ){}のように使用します
  • イテレーターのインターフェースは以下のようになります。
  • オブジェクトIterableは[Symbol.iterator]メソッドをもち、Iteratorを返します
  • Iteratorはnextメソッドをもち、IteratorResult を返します。
  • IteratorResult はvalueプロパティとdoneプロパティを持ち、値と終了判定フラグを返します。
  • 例:http://www.es6fiddle.net/i89mkv62/
interface IteratorResult {
  done: boolean;
  value: any;
}
interface Iterator {
  next(): IteratorResult;
}
interface Iterable {
  [Symbol.iterator](): Iterator
}

Generators

  • イテレータを簡素化するためにジェネレータが用意されています
  • ジェネレータはfunction*yieldを使用します
  • function*で定義されたfunctionはジェネレータを返します
  • ジェネレータはnextとthrowをもつイテレータのサブタイプです。
  • function*内ではyieldを用い、値を返します。
  • 例:http://www.es6fiddle.net/i89n7uh9/

Unicode

Modules

  • モジュールがサポートされます
  • モジュール側はexportを、呼び出し側はimportを使用します
  • モジュール側はexportをclass, function, var などの頭につけることで外部に公開できます
  • 呼び出し側はimport * as <name> from <module>することでmoduleがexportしたメンバをもつnameオブジェクトを使用できます
  • 分解代入を使用しimport {<member1>,<member2>} from <module>のように必要なメンバのみ取得することも可能です
  • module側はexport defaultを使用することでasを使用せずimport <name> from <module>でデフォルトの関数等を指定できます
  • defaultを使用した場合、import * as from `のnameオブジェクトにdefaultは含まれません
  • defaultと通常のexportを両用したモジュールの場合、import <name1>, * as <name2> from <module>または`import , {, as from のように記述できます
  • moduleはexport * from <another_module>により別モジュールを自身のメンバのように公開することができます
lib/math.js
export function sum(x, y) {
  return x + y;
}
export var pi = 3.141593;
lib/mathplusplus.js
export * from "./math";
export var e = 2.71828182846;
export default function(x) {
    return Math.exp(x);
}
script.js
import exp,{e,pi} from "./lib/mathplusplus";
console.log(e)
console.log("e^pi = " + exp(pi));
result.
C:\workspace\babel>babel-node script.js
2.71828182846
e^pi = 23.14070064895278

Module Loaders

  • 動的なモジュールローダがサポートされます
  • npm install systemjs traceurが必要です
import System from 'systemjs'

System.import("./lib/math").then(function(m) {
  console.log("2π = " + m.sum(m.pi, m.pi));
});

今回はここまで。3分の2くらい終わりました。次回

17
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
17
16