SIBYL System

just technical blog

ES2017を理解してみる

   

es6

ECMAScriptについて、とっても詳しく説明されているスライドが以下にあるので是非参照して下さい

 

ECMAScript(ES)とは

上のスライドとも説明が重複しますが、ECMAScript(えくますくりぷと)とは、JavaScriptの言語仕様で、JavaScriptはECMAScriptの仕様に基づいた実装のひとつとなります。

es-js

 

 

各々のブラウザはJavaScriptを動かす仕組み(JavaScriptエンジン)を持っていますが、各ベンダが開発したものであり、メソッド別の性能や(バグがあるなどの理由で)挙動が少し異なる場合があります。以下は代表的なブラウザをいくつかとそのJavaScriptエンジン名です。

1479922549_chrome 1479922557_internet-explorer 1479922574_safari 1479922580_firefox
Google Chrome
V8
Internet Explorer
Chakra
Safari
Nitro
Firefox
Spider Monkey

ES.Nextとは

ECMAScriptがより便利なものとするために、開発者やブラウザベンダが新しい仕様を提案を出し策定しています。

そして、次期ECMAScriptの事をES.Nextと呼んでいます。

現在(2016年)に提案中のES.NextはES2017と呼ばれており、2017年中には、正式リリースされるようです。

ES2017で提案されている機能

ではES2017で追加される機能は何でしょうか。現在提案されている機能を紹介します。

各ブラウザの実装状況はブログの投稿から時間が立つに連れすぐに変わってくると思うのでMDNのリンクからブラウザ別の対応状況をご確認ください。

 

Object.values / Object.entries

前から存在しているメソッドであるObject.keysはオブジェクトのプロパティのkey一覧を配列で返します。それに近い機能で、Object.valuesは値の配列を返し、Object.entriesはキーと値が配列になった配列を返します。

Object.keys

Object.values

Object.entries

 

ブラウザ Chrome Firefox (Gecko) Internet Explorer Opera Safari
サポート 51.0 47

最新状況:

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/values

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/entries

String padding

StringのprototypeにpaddingStartとpaddingEndメソッドの追加が提案されています。

第一引数が文字長、第二引数が埋める文字となっておりデフォルトは空白文字で埋められます。

padStartは前方にパディングを行います。

対して、padEndは後方にパディングを行います。

 

ブラウザ Chrome Firefox (Gecko) Internet Explorer Opera Safari
サポート 48  –

最新状況:

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/String/padStart

 

Object.getOwnPropertyDescriptors

既にObject.getOwnPropertyDescriptorというメソッドがあるのですが、Object.getOwnPropertyDescriptorsは複数まとめて実行できるメソッドになっています。

Object.getOwnPropertyDescriptor(s)は、Object自身に存在するプロパティのDescriptorを取得します。プロパティとは以下のような物のことですね。例ではoというオブジェクトにbarというプロパティが含まれています。

Object.getOwnPropertyDescriptor(s)はこのbarプロパティに含まれているDescriptorを取得できるというわけです。ではDescriptorとは何なのでしょうか。Descriptorとは日本語で記述子と言い、構造や内容の要約、ファイル属性などが記された情報のことを指します。

Property Descriptor には以下の三種類が存在し、

  1. DataDescriptor
  2. AccessorDescriptor
  3. GenericDescriptor

以下の6つのfieldに何が登録されているかによってどのProperty Descriptorになるのかが決まります。

  • Enumerable … for-inでiterateした時にkeyとして列挙できるか
  • Configurable … Property Descriptorの属性を編集できるか
  • Writable … Dataの値の書き換えができるか
  • Value … Dataの値
  • Get … getterの値
  • Set … setterの値

先程のbarプロパティをObject.getOwnPropertyDescriptorで確認してみます。

Descriptorを確認できましたね。writableまたはvalueが含まれるのはDataDescriptorとなります。それぞれのfieldによってどのPropertyDescriptorになるかはこちらのサイトをご参考ください。

ブラウザ Chrome Firefox (Gecko) Internet Explorer Opera Safari
サポート 50  –

最新状況:

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/getOwnPropertyDescriptors

Trailing commas in function parameter lists and calls

引数を複数行で書いた場合の最後のカンマ(通称ケツカンマ)を許容します。よくある追加/削除時にバージョン管理ツールで変更箇所が2行になるのを1行に抑えられます。

引数が増えてもy引数が書かれている行は既にカンマが入っていたので変更が加わりません。

 

Async Functions

非同期処理を同期的に書くことができるようになります。

 

 

ブラウザ Chrome Firefox (Gecko) Internet Explorer Opera Safari
サポート 55 52 42

最新状況

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function

ES2017の実行環境を作ってみる

npm環境を新規作成して、npmでbabel-cliとes2017のプリセットを入れましょう。

babelのプリセット情報を記載する.babelrcファイルを作成します。

 

index.jsを作ります

実行します。

startが表示された1秒後にendが表示されたでしょうか。

その他

asyncに関しては時間が作ってもう少し調べて見ようと思います。

参考

http://yoshiko-pg.github.io/slides/20161112-nodefes/

http://efcl.info/2015/10/18/ecmascript-paper/

 

 - Javascript , , ,