hylom'sWeblog

- hylom's blog
| about hylom / hylom.net | old contents | login

ECMAScript 2015の仕様書を読む(その21)

posted on 2016/05/31 00:26:16

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回はリフレクションやプロキシ、モジュール名前空間に関連するオブジェクトに関する第26章。

第26章第1節

 Reflectオブジェクトについて。Reflectオブジェクトは内部オブジェクトとして定義されているオブジェクトで、グローバルオブジェクトのReflectプロパティの初期値になっている。関数オブジェクトではないので直接このオブジェクトを実行することはできないし、newキーワードを使って直接コンストラクタを呼び出すこともできない。

 Reflectオブジェクトは以下のプロパティ/メソッドを持つ。これらはObjectと同名のものもあるが、targetがオブジェクトでない場合必ずTypeErrorを発生させる点が異なる。

Reflect.apply(target, thisArgument, argumentsList)	target関数をargumentsListを引数として与えて実行する。このときthisにはthisArgumentが渡される
Reflect.construct(target, argumentsList [, newTarget])	targetを元に新たにオブジェクトを作成する。このときargumentsListを引数としてコンストラクタが実行される。newTargetがあ場合、これをコンストラクタとして使う。
Reflect.defineProperty(target, propertyKey, attributes)	targetにpropertyKeyという名前でプロパティを追加し、値にattributesをセットする
Reflect.deleteProperty(target, propertyKey)	targetのproprtyKeyプロパティを削除する
Reflect.enumerate(target)	targetのenumerableなプロパティに帯するiteratorを返す
Reflect.get(target, proertyKey [, receiver])	tagetのpropertyKeyプロパティを取得する。receiverが指定された場合、これをthisとして使用する
Reflect.getOwnPropertyDescriptor(target, propertyKey)	targetのpropertyKeyのPropertyDescriptorを返す
Reflect.getPrototypeOf(target)	targetのprototypeを返す
Reflect.has(target, propertyKey)	targetがpropertyKeyプロパティを持っていたらtrueを返す
Reflect.isExtensible(target)	targetがextensibleならtrue
Reflect.ownKeys(target)	targetが独自に持つプロパティキーの配列を返す
Reflect.preventExtensions(target)	targetの拡張を禁止する
Reflect.set(target, propertyKey, V [, receiver])	targetのpropertyKeyプロパティにVをセットする。receiverが与えられた場合、これをthisとする。
Reflect.setPrototypeOf(target, proto)	targetのプロトタイプをprotoに設定する

第26章第2節

 Proxyオブジェクトについて。Proxyオブジェクトは、あるオブジェクトについて、これを変更することなくそのプロパティやメソッドに対する挙動を追加・変更するために使われるオブジェクトである。

 ProxyオブジェクトはグローバルオブジェクトのProxyプロパティの初期値。Proxyコンストラクタは(target, handler)という引数を取り、targetをベースとした新たなproxyオブジェクトを作成する。このオブジェクトのプロパティにアクセスしたり、メソッドを実行しようとするとhandler関数が実行される。なおProxyオブジェクトは通常の関数としての実行は不可で、newキーワード無しで実行するとTypeErrorとなる。

 また、ProxyオブジェクトはProxy.revocable(target, handler)というメソッドを持つ。このメソッドは取り消し可能な(proxyを無効にできる)proxyオブジェクトを返す。このオブジェクトはproxy自体を格納するproxyプロパティおよびproxyを無効にするrevokeメソッドを持つ。

第26章第3節

 モジュール名前空間オブジェクト(Module Namespace Object)について。このオブジェクトはimportキーワードを使ってモジュールをロードした際に生成される。@@toStringTagプロパティおよび[@@iterator]()メソッドを持ち、前者は"Module"を返す。後者はモジュールの名前空間に登録されているキーに対するiteratorを返す。

ECMAScript 2015の仕様書を読む(その20)

posted on 2016/05/26 23:40:32

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回はイテレータやジェネレータ、Promise関連のオブジェクトに関する第25章。

第25章1節

 イテレーションについて。iterate可能なオブジェクトは、@@iteratorプロパティでそのオブジェクトに対応するiteratorを取得できる。iteratorはnextメソッドを持ち、このメソッドを実行するとIteratorResultオブジェクトを返す。このオブジェクトは次のメソッドを持つ。これらはすべてIteratorResultオブジェクトを返す。

next

 また、オプションで次のプロパティを持つ。これらはすべてIteratorResultオブジェクトを返す。

return
throw

 returnは、それ以上nextメソッドを呼び出さないことをiteratorに通知する際に実行される。また、throwはiteratorに何らかのエラーが発生したことを通知するために使われる。throwは引数にexceptionオブジェクトなどのエラー内容を格納するオブジェクトを与えることができる。

 IteratorResultオブジェクトは次のプロパティを持つ。

done	iterateが完了するとtrue
value	対応する値を格納する

第25章2節

 GeneratorFunctionについて。GeneratorFunctionはFunctionオブジェクトの派生オブジェクトであり、Functionオブジェクトのコンストラクタから派生した独自のコンストラクタと、Iteratorのプロトタイプから派生した独自のprototypeを持つ。GeneratorFunctionはグローバルオブジェクトではないが、下記のコードを用いて取得できる。

Object.getPrototypeOf(function*(){}).constructor

 GeneratorFunctionは関数として実行できる。newキーワードを付けても付けなくても同じ挙動を行う。サブクラス化も可能だが、その際はコンストラクタ内でsuperキーワードを使ってGeneratorFunctionオブジェクトを生成する必要がある。また、GeneratorFunctionオブジェクトはfunction*キーワードで生成できる。

 GeneratorFunctionは次のような形式で実行できる。

GeneratorFunction(p1, p2, ..., pn, body)

 bodyは実行コード、p1〜pnはそれに与える引数の識別子である。これらは通常は文字列として与えられる。

GeneratorFunction.prototype.constructor	内部オブジェクト
GeneratorFunction.prototype.prototype	内部オブジェクト
GeneratorFunction.prototype[@@toStringTag]	"GeneratorFunction"

 また、GeneratorFunctionインスタンスはlengthおよびname、prototypeプロパティを持つ。

第25章3節

 ジェネレータオブジェクトについて。このオブジェクトはジェネレータ関数のインスタンスであり、IteratorとIterableインターフェイスの両方の性質を持つ。このオブジェクトはジェネレータオブジェクトのprototypeではなく、インスタンスを作成したジェネレータ関数のprototypeを引き継ぐ。つまり、GeneratorオブジェクトのprototypeオブジェクトはGeneratorFunction.prototypeである。

 Generator.prototypeは次のプロパティ/メソッドを持つ。

Generator.prototype.constructor コンストラクタ
Generator.prototype.next(value)	ジェネレータ関数の状態をvalueにする
Generator.prototype.return(value)	valueを返して処理を終了させる
Generator.prototype.throw(exception)	ジェネレータ関数で例外を発生させる
Generator.prototype[@@toStringTag]	"Generator"

 ジェネレータ関数内では、yieldキーワードの戻り値を使っているケースがある。この場合、次にジェネレータ関数が呼び出された場合にその戻り値が関数内で続く処理に渡されるわけだが、nextメソッドを利用することでその値を変更できる。

第25章4節

 Promiseオブジェクトについて。Promiseオブジェクトは遅延・非同期処理を行うためのオブジェクト。内部的に「Resolve」と「Reject」の2つの関数オブジェクトを保持し、またfulfilled、rejected、pendingの3つのステータスのどれか1つを持つ。

 内部で非同期処理を行っている場合など、それが終了する時点では結果が分からない関数でPromiseオブジェクトを返り値として使用することが想定されている。このオブジェクトは処理が完了するとfulfilledもしくはrejectedのステータスとなり、ステータスを監視することで並列処理が完了したのか、またその結果がどうなったのかを知ることができる。

 Promiseオブジェクトは関数としては実行できない。newキーワード付きでコンストラクタとしての実行のみが許可される。Promiseオブジェクトのコンストラクタはサブクラス化可能であるが、その場合はsuperキーワードを使ってコンストラクタ内でPromiseオブジェクトを生成する必要がある。

 PromiseのコンストラクタはPromise(executor)という形で呼び出される。executorは関数オブジェクトであり、遅延・非同期処理が完了した際に呼び出される。また、resolveとrejectという2つの引数を持つ。いずれも関数オブジェクトで、executor関数内で処理が成功したのか、それとも失敗したのかを通知するために呼び出すことができる。また、executor関数の終了(returnの実行)は遅延・非同期処理の完了を意味するのでは無く、その処理が受け付けられたというのを示すだけである。

 引数として与えられるresolve関数は、1つの引数を取る。executor関数内で対応するPromiseオブジェクトの解決を行いたい際にこの関数が呼び出され、引数には遅延・非同期処理が進められる際に得られた値が渡される。

 引数として与えられるreject関数も1つの引数を取る。executor関数内で対応するPromiseオブジェクトがrejectされ、成功しないことが分かった際にこの関数が呼び出される。引数にはrejectされたことを示す値(一般的にはErrorオブジェクト)が渡される。

 Promiseオブジェクトは次のメソッド/プロパティを持つ。

Promise.all(iterable)	与えられたPromiseのすべてが成功した際に成功となる新たなPromiseオブジェクトを返す
Promise.prototype	内部オブジェクト
Promise.race(iterable)	与えられたPromiseのうち、最初に完了したPromiseと同じ結果を返す新たなPromiseオブジェクトを返す
Promise.reject(r)	与えられた引数によって失敗状態となる新たなPromiseオブジェクトを返す
Promise.resolve(x)	与えられた引数によって成功状態となる新たなPromiseオブジェクトを返す
Promise[@@species]	getter

 また、Promise.prototypeは下記のメソッド/プロパティを持つ。

Promise.prototype.catch(onRejected)	Promiseが失敗したときに実行されるコールバック関数を設定する
Promise.prototype.constructor	コンストラクタ
Promise.then(onFulfilled, onRejected)	成功した際および失敗した際に実行されるコールバック関数を設定する
Promise.prototype[@@toStringTag]	"Promise"

ECMAScript 2015の仕様書を読む(その19)

posted on 2016/05/23 22:01:25

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回はArrayBufferおよびDataView、JSONオブジェクトについて規定する第24章。

第24章1節

 ArrayBufferオブジェクトについて。ArrayBufferは、処理系内部に確保された、任意の値を格納できるメモリバッファをラップするオブジェクトとなる。このオブジェクトは内部的にはデータを格納するメモリバッファと、そのバッファの長さを保持する。

 ArrayBufferコンストラクタはサブクラス化可能にデザインされている。その場合、サブクラスのコンストラクタ内ではsuperキーワードを使ってWeakMapコンストラクタを呼び出してインスタンスの初期化を行う必要がある。

 ArrayBufferをnewキーワード付きで関数として実行すると、ArrayBufferのインスタンスを生成できる。この際、引数にはバッファの長さを指定できる。newキーワード無しで実行するとTypeErrorとなる。

 ArrayBufferオブジェクトは下記のメソッド/プロパティを持つ。

ArrayBuffer.isView(arg)	argがViewedArrayBufferであればtrueを返す
ArrayBuffer.prototype	内部オブジェクト
ArrayBuffer[@@species]	getter。

 また、ArrayBuffer.prototypeは次のメソッド/プロパティを持つ。

ArrayBuffer.prototype.byteLength	getter。対応するバッファのバイト数を返す
ArrayBuffer.prototype.constructor	コンストラクタ
ArrayBuffer.prototype.slice(start, end)	対応するバッファのstartバイトからendバイトを新たに作成したArrayBufferにコピーして返す
ArrayBuffer.prototype[@@toStringTag]	"ArrayBuffer"

第24章2節

 DataViewオブジェクトについて。DataViewオブジェクトは対応するArrayBufferに格納されたデータにアクセスするためのメソッドを提供する。データへのアクセスはすべてNumber形式で行い、またコンストラクタで指定したbyteOffsetおよびbyteLengthの範囲を超える範囲へはアクセスできない。 

 ArrayBufferコンストラクタはサブクラス化可能にデザインされている。その場合、サブクラスのコンストラクタ内ではsuperキーワードを使ってWeakMapコンストラクタを呼び出してインスタンスの初期化を行う必要がある。

 DataViewオブジェクトをnewキーワード付きで関数として実行すると、DataViewオブジェクトのインスタンスを生成できる。引数はDataView(buffer [, byteOffset [, byteLength]])の最大3つ。bufferは対応付けるArrayBuffer(もしくはその派生オブジェクト)。byteOffset、ByteLengthはそれぞれバッファを参照する際のオフセットと、最大長さ。

 DataViewオブジェクトはprototypeプロパティのみを持つ。また、DataView.prototypeは次のメソッド/プロパティを持つ。

DataView.prototype.buffer	getter。対応付けられたArrayBufferを返す
DataView.prototype.byteLength	getter。参照できる最大バイト数を返す
DataView.prototype.byteOffset	getter。バッファを参照する際のオフセットを返す
DataView.prototype.constructor	コンストラクタ
DataView.prototype.getFloat32(byteOffset [, littleEndian])	対応付けられたバッファのbyteOffsetバイト目からのデータをFloat32として扱い、それをNumber形式に変換してデータを取り出す。littleEndianがtrueならリトルエンディアン、falseならビッグエンディアンで取り出す。以下、取り出す形式が異なるのみで同じ処理を行う
DataView.prototype.getFloat64(byteOffset [, littleEndian])	
DataView.prototype.getInt8(byteOffset)	
DataView.prototype.getInt16(byteOffset [, littleEndian])	
DataView.prototype.getInt32(byteOffset [, littleEndian])	
DataView.prototype.getUint8(byteOffset)	
DataView.prototype.getUint16(byteOffset [, littleEndian])	
DataView.prototype.getUint32(byteOffset [, littleEndian])	
DataView.prototype.setFloat32(byteOffset, value [, littleEndian])	対応付けられたバッファのbyteOffsetバイト目以降に、valueをFloat32として扱ってバイナリ化したものを書き込む。littleEndianがtrueならリトルエンディアン、falseならビッグエンディアンで取り出す。以下、取り出す形式が異なるのみで同じ処理を行う
DataView.prototype.setFloat64(byteOffset, value [, littleEndian])	
DataView.prototype.setInt8(byteOffset, value)	
DataView.prototype.setInt16(byteOffset, value [, littleEndian])	
DataView.prototype.setInt32(byteOffset, value [, littleEndian])	
DataView.prototype.setUint8(byteOffset, value)	
DataView.prototype.setUint16(byteOffset, value [, littleEndian])	
DataView.prototype.setUint32(byteOffset, value [, littleEndian])	
DataView.prototype[@@toStringTag]	"DataView"

第24章3節

 JSONオブジェクトについて。JSON形式で記述されたテキストベースのデータをオブジェクト化するもの。

 JSONオブジェクトはコンストラクタを持たないため、newキーワード付きでは実行できず、また関数として実行することもできない。

 JSONオブジェクトは次のメソッドを持つ。

JSON.parse(text [, reviver])	textをJSON文字列としてパースしECMAScriptオブジェクト/値を生成する。関数オブジェクトであるreviverが与えられた場合、この関数に対しthisとしてプロパティを含むオブジェクトを、引数にプロパティ名と値を与えて実行してこの値を変換できる
JSON.stringify(value, [, replacer [, space]])	valueをJSON文字列に変換する。関数オブジェクトであるreplacerが与えられた場合、引数にプロパティ名と値を与えて実行してその値を変換できる。spaceがtrueだった場合、変換結果を整形する。
JSON[@@toStringTag]	"JSON"

ECMAScript 2015の仕様書を読む(その18)

posted on 2016/05/19 02:14:55

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回はWeakMapについて規定する第23章第3節とWeakSetについて規定する第4節。

第23章3節

 WeakMapはキー/値のペアを格納するオブジェクト。Mapとは異なり、キーにはオブジェクトしか使用できない。さらにWeakMapではキーを列挙する手段が提供されていない。WeakMapでは格納するキーに対し弱参照のみを保持する。そのため、キーとして使われたオブジェクトがgarbage collectionで回収された場合、WeakMap内からそのキーおよび対応付けられた値は削除される。

 WeakMapコンストラクタはサブクラス化可能にデザインされている。その場合、サブクラスのコンストラクタ内ではsuperキーワードを使ってWeakMapコンストラクタを呼び出してインスタンスの初期化を行う必要がある。

 WeakMapオブジェクトを関数として実行する場合、newキーワード付きで実行する必要がある。引数にはiterableなオブジェクトを取る。

 WeakMapオブジェクトはprototypeプロパティを持つ。WeakMap.prototypeオブジェクトは下記のメソッド/プロパティを持つ。

WeakMap.prototype.constructor	コンストラクタ
WeakMap.prototype.delete(key)	keyに対応するキー/値のペアを削除する
WeakMap.prototype.get(key)	keyに対応する値を返す
WeakMap.prototype.has(key)	keyに対応するキーがあればtrue
WeakMap.prototype.set(key, value)	keyに対応する値をvalueにセットする
WeakMap.prototype[@@toStringTag]	"WeakMap"

第23章4節

 WeakSetはオブジェクトのセットを格納するオブジェクト。Setとは異なり、オブジェクトしか格納できない。WeakMapと同様、格納されているオブジェクトを列挙する手段は提供されておらず、格納するオブジェクトに対し弱参照のみを保持する。

 WeakSetコンストラクタはサブクラス化可能にデザインされている。その場合、サブクラスのコンストラクタ内ではsuperキーワードを使ってWeakSetコンストラクタを呼び出してインスタンスの初期化を行う必要がある。

 WeakSetオブジェクトを関数として実行する場合、newキーワード付きで実行する必要がある。引数にはiterableなオブジェクトを取る。

 WeakSetオブジェクトはprototypeプロパティを持つ。WeakSet.prototypeオブジェクトは下記のメソッド/プロパティを持つ。

WeakSet.prototype.add(value)	valueをセットに追加する
WeakSet.prototype.constructor	コンストラクタ
WeakSet.prototype.delete(value)	valueに対応する値をセットから削除する
WeakSet.prototype.has(value)	valueがセット内にあればtrue
WeakSet.prototype[@@toStringTag]	"WeakSet"

ECMAScript 2015の仕様書を読む(その17)

posted on 2016/05/18 00:49:06

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回はMapについて規定する第23章第1節とSetについて規定する第2節。

第23章1節

 Mapオブジェクトについて。任意のキーと値の組み合わせを格納できるオブジェクト。Mapコンストラクタはextendsでサブクラス化が可能。サブクラスのコンストラクタはsuperキーワードでMapコンストラクタを呼ぶ必要がある。

 Map()関数は必ずnewキーワード付きで呼び出す必要がある。引数にはiterableなオブジェクトを与えられる。また、Map.prototypeおよびMap[@@species]というプロパティを持つ。

 Map.prototypeは下記のメソッド/プロパティを持つ。

Map.prototype.clear()	格納しているキー/値をすべて空にする
Map.prototype.constructor	コンストラクタ
Map.prototype.delete(key)	keyに対応するキー/値を空にする
Map.prototype.entries()	キー/値を対象とするMapIteratorを返す
Map.prototype.forEach(callbackfn [, thisArg])	各要素のキー/値を引数にcallbackfnを呼び出す
Map.prototype.get(key)	keyに対応する値を返す
Map.prototype.has(key)	keyに対応するキーがあればtrue
Map.prototype.keys()	キーを対象とするMapIteratorを返す
Map.prototype.set(key, value)	keyというキーにvalueという値をセットする
Map.prototype.size	getter。サイズを返す
Map.prototype.values()	値を対象とするMapIteratorを返す
Map.prototype[@@iterator]()	entriesと同様
Map.prototype[@@toStringTag]	"Map"という文字列を返す

第23章2節

 Setオブジェクトについて。任意の値を格納できる。1つの値は1つしか格納できない。Setコンストラクタはサブクラス化可能で、その際はサブクラスのコンストラクタ内でsuperキーワードを使ってSetコンストラクタを呼ぶ必要がある。

 Set()関数は必ずnewキーワード付きで呼び出す必要がある。引数にはiterableなオブジェクトを与えられる。また、Set.prototypeおよびSet[@@species]というプロパティを持つ。

 Set.prototypeは下記のメソッド/プロパティを持つ。

Set.prototype.add(value)	指定した値を追加する
Set.prototype.clear()	格納している値をすべて取り除く
Set.prototype.constructor	コンストラクタ
Set.prototype.delete(value)	valueに対応する値を取り除く
Set.prototype.entries()	値を対象とするSetIteratorを返す
Set.prototype.forEach(callbackfn [, thisArg])	各値を引数にcallbackfnを呼び出す
Set.prototype.has(value)	valueに対応する値があればtrue
Set.prototype.keys()	値を対象とするSetIteratorを返す
Set.prototype.size	getter。サイズを返す
Set.prototype.values()	値を対象とするSetIteratorを返す
Set.prototype[@@iterator]()	valuesと同様
Set.prototype[@@toStringTag]	"Set"という文字列を返す

ECMAScript 2015の仕様書を読む(その16)

posted on 2016/05/16 22:56:04

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回はTypedArrayなどについて規定する第22章2節。

第22章2節

 TypedArrayはバイナリデータを格納するための配列状オブジェクト。格納可能な要素はInt8/Uint8/Uint8C/Int16/Uint16/Int32/Uint32/Float32/Float64のいずれかで、各要素はすべて同じ型である必要がある。各型ごとに異なる次の関数オブジェクトがコンストラクタとして用意されている。

Int8Array
Uint8Array
Uint8ClampedArray
Int16Array
Uint16Array
Int32Array
Uint32Array
Float32Array
Float64Array

 これらはすべて同じ引数を持ち、また同じprototypeを持つので、以下ではこれらのオブジェクトを%TypedArray%と表記する。

 %TypedArray%は異なる引数を持つ複数の形式で関数として呼び出せる。ただし、これらはすべてnewキーワード付き呼び出す必要がある。newキーワードなしで呼び出すと、TypeErrorを返す。

 コンストラクタに与えられる引数とその際の動作は下記のとおり。

%TypedArray%()	空のTypedArrayを返す
%TypedArray%(length)	指定した数の要素を持つTypedArrayを返す。各要素は0に設定される
%TypedArray%(typedArray)	typedArrayと同じ要素を持つTypedArrayを返す
%TypedArray%(object)	objectを元にTypedArrayを作成して返す
%TypedArray%(buffer [, byteOffset [, length]])	bufferのbtyeOffsetからlengthまでの部分を格納したTypedArrayを作成して返す

 %TypedArray%は下記のメソッド/プロパティを持つ。

%TypedArray%.from(source [, mapfn [, thisArg]])	sourceオブジェクトからTypedArrayを作成して返す。mapfnが指定された場合はこの関数を用いたmap処理が行われたあとに作成されたTypedArrayを返。
%TypedArray%.of(...items)	itemsを要素として持つTypedArrayを作成して返す
%TypedArray%[@@species]	gettter。thisを返す

 %TypedArray%.prototypeは下記のメソッド/プロパティを持つ。なお、とくに説明のないものについてはArray.prototypeの同名メソッド/プロパティと同じ処理を行う。

%TypedArray%.prototype.buffer	getter。格納するデータをbuffer形式で返す
%TypedArray%.prototype.byteLength	getter。格納するバイト数を返す
%TypedArray%.prototype.byteOffset	getter。byteOffsetを返す
%TypedArray%.prototype.constructor	コンストラクタ
%TypedArray%.prototype.copyWithin(target, start [, end])
%TypedArray%.prototype.entries()
%TypedArray%.prototype.every(callbackfn [, thisArg])
%TypedArray%.prototype.fill(value, [, start [, end]])
%TypedArray%.prototype.filter(callbackfn [, thisArg])
%TypedArray%.prototype.find(predicate [, thisArg])
%TypedArray%.prototype.findIndex(predicate [, thisArg])
%TypedArray%.prototype.forEach(callbackfn [, thisArg])
%TypedArray%.prototype.indexOf(searchElement [, fromIndex])
%TypedArray%.prototype.join(separator)
%TypedArray%.prototype.keys()
%TypedArray%.prototype.lastIndexOf(searchElement [, fromIndex])
%TypedArray%.prototype.length	格納する要素数
%TypedArray%.prototype.map(callbackfn [, thisArg])
%TypedArray%.prototype.reduce(callbackfn, [initialValue])
%TypedArray%.prototype.reduceRight(callbackfn, [initialValue])
%TypedArray%.prototype.set(overloaded [, offset])	第一引数からデータを読み込む。型によって処理が異なる
%TypedArray%.prototype.set(array [, offset])	arrayからデータを読み込む
%TypedArray%.prototype.set(typedArray [, offset])	typedArrayからデータを読み込む
%TypedArray%.prototype.slice(start, end)
%TypedArray%.prototype.some(callbackfn [, thisArg])
%TypedArray%.prototype.sort(comparefn)
%TypedArray%.prototype.subarray([begin [, end]])	部分配列を返す。この部分配列はバッファを共有する
%TypedArray%.prototype.toLocaleString([reserved1 [, reserved2]])
%TypedArray%.prototype.toString()
%TypedArray%.prototype.values()
%TypedArray%.prototype[@@iterator]()
%TypedArray%.prototype.[@@toStringTag]  getter。名前を返す

 なお、内部的に基底クラスとしてTypedArrayというものは存在するが、これをECMAScript 2015から直接操作することはできない。

 TypedArray.BYETS_PER_ELEMENTおよびTypedArray.prototype.BYTES_PER_ELEMENTで各要素のバイト数を参照できる。

ECMAScript 2015の仕様書を読む(その15)

posted on 2016/05/13 01:40:34

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回は配列(Array)などについて規定する第22章第1節。

第22章第1節

 Arrayオブジェクトは特別なオブジェクトであり、例外的なプロパティ名を持つ。Arrayオブジェクトを関数として実行すると、新たなArrayオブジェクトを作成して返す。newキーワード付きの場合も同じ処理を行う。また、Arrayコンストラクタは拡張可能で、そのサブクラスはコンストラクタ内でsuperキーワードを使ってArrayコンストラクタを呼び出してオブジェクトを初期化する必要がある。

 Arrayコンストラクタは引数の数によって処理が変わる。引数が無い場合、空の配列を返す。1つの引数を与えた場合、その引数がNumberでかつその値がUint32に変換したものと等しい場合、長さがその値に等しく、かつ各要素がundefinedの配列を作成して返す。そうでない場合、その値を含む長さ1の配列を返す。2つ以上の引数が与えられた場合、それらを格納する配列を返す。

 Arrayオブジェクトは次のプロパティ/メソッドを持つ。

Array.from(items [, mapfs [, thisArg]])	mapfs関数にitems引数の各要素を与えて実行した結果を格納した配列を返す。また、thisArgが指定された場合、mapfsを実行時にそれをthisとして使用する。items引数はiterableなものであれば何でも良い
Array.isArray(arg)	argがArrayであればtrueを返す
Array.of(...items)	引数を値として格納した配列を返す

 Array.prototypeは内部オブジェクトであり、書き換えは不可能。また、Array[@@species]というアクセサプロパティを持つ。値はundefined。

 Array.prototypeプロパティは下記のプロパティ/メソッドを持つ。なお、thisArg引数はcallbackfnを実行する際にthisとして使用するオブジェクトである。また、startが負の場合、length+startが指定されたものとして処理が行われる。endが指定されなかった場合lengthが、endが負の場合length+endが指定されたものとして処理される。

Array.prototype.concat(...arguments)	引数を値として拝謁の末尾に追加する。引数が配列だった場合、その各要素を追加する
Array.prototype.constructor	コンストラクタ
Array.prototype.copyWithin(target, start [, end])	配列内のstartからendまでをtargetの位置から順に格納する
Array.prototype.entries()	[インデックス, 値]をvalue要素に格納するiteratorを返す
Array.prototype.every(callbackfn [, thisArg])	各要素を引数としてcallbackfnを実行し、すべてがtrueならtrueを返す
Array.prototype.fill(value [, start [, end]])	startからendまでの要素をvalueに設定する
Array.prototype.filter(callbackfn [, thisArg])	各要素を引数としてcallbackfnを実行し、trueを返したもののみを含む配列を作成して返す
Array.prototype.find(predicate [, thisArg])	各要素を引数としてpredicateを実行し、trueを返した場合その値を返す。predicateは要素、インデックス、対象の配列という3つの引数が与えられる
Array.prototype.findIndex(predicate [, thisArg])	findと同様の処理を行う。findとは異なり、インデックスを返す
Array.prototype.forEach(callbackfn [, thisArg])	各要素を引数としてcallbackfnを実行する。undefinedを返す
Array.prototype.indexOf(searchElement [, fromIndex])	searchElementと一致する要素のインデックスを返す。fromIndexが指定された場合、その位置から検索を開始する。比較には===演算子が使われる
Array.prototype.join(separator)	各要素を文字列に変換し、separatorを介して連結したものを返す。separatorがundefinedだった場合、","が使われる
Array.prototype.keys()	各キーをvalue要素に格納するiteratorを返す
Array.prototype.lastIndexOf(searchElement [, fromIndex])	searchElementと一致する最後の要素のインデックスを返す。fromIndexが指定された場合、その位置から検索を開始する。比較には===演算子が使われる
Array.prototype.map(callbackfn [, thisArg])	各要素を引数としてcallbackfnを実行し、その結果を含む配列を返す
Array.prototype.pop()	配列の最後の要素を削除してそれを返す
Array.prototype.push(...items)	引数として与えられた値をそれぞれ配列の最後に追加する
Array.prototype.reduce(callbackfn [, initialValue])	各要素を引数としてcallbackfnを実行する。callbackfnには直前に実行されたcallbackfnの戻り値、配列の要素、配列のインデックス、配列の4つの引数が与えられる。initialValueが指定された場合、それが最初に実行されるcallbackfnの第1引数となる。最後に実行されたcallbackfnの戻り値を返す
Array.prototype.reduceRight(callbackfn, [, initialValue])	reduceを逆方向に実行する
Array.prototype.reverse()	配列の要素の順序を逆にする
Array.prototype.shift()	配列の最初の要素を削除して返す
Array.prototype.slice(start, end)	startからendまでの要素を含む配列を返す
Array.prototype.some(callbackfn [, thisArg])	各要素を引数としてcallbackfnを実行し、いずれかがtrueを返したらtrueを返す
Array.prototype.sort(comparefn)	comparefnを比較関数としてソートを実行する
Array.prototype.splice(start, deleteCount, ...items)	startからdeleteCount個の要素を取り除き、そこにitemsで与えた各要素を追加する
Array.prototype.toLocaleString([reserved1 [, reserved2]])	ECMA-402で定義された地域課文字列を返す
Array.prototype.toString()	配列を文字列に変換する
Array.prototype.unshift(...items)	配列の最初に要素を追加しそのlengthを返す
Array.prototype.values()	各要素をvalue要素に格納するiteratorを返す
Array.prototype[@@iterator]()	valuesと同じ
Array.prototype[@@unscopables]	["copyWithin", "entries", "fill", "find", "findIndex", "includes", "keys", "values"]

 Arrayインスタンスはlengthプロパティを持つ。また、Arrayオブジェクトのiteratorはnext()のほか、[@@toStringTag]要素を持つ。

ECMAScript 2015の仕様書を読む(その14)

posted on 2016/05/11 23:13:51

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回はテキスト処理関連について規定する第21章のうち、RegExpオブジェクトについて。

第21章2節

 RegExpオブジェクトは正規表現およびそれに関するフラグを格納するオブジェクト。Perl 5の正規表現をベースにしている。ECMAScriptで使える正規表現については詳しくまとめると大変なので省略。また、Perlとは異なり使える文字クラスは\d(数字)、\D(数字以外)、\s(ホワイトスペース)、\S(ホワイトスペース以外)、\w(アルファベットおよび数字、アンダースコア)、\W(アルファベットおよび数字、アンダースコア以外)の6つのみ。また、コントロールシーケンスは\t(HT)、\n(LF)、\v(VT)、\f(FF)、\r(CR)が定義されている。

 RegExpオブジェクトは(pattern, flags)という引数を取る。patternは正規表現リテラルもしくは文字列、flagsがフラグ。

 利用できるフラグはg(global)、i(ignoreCase)、m(multiline)、u(unicode)、y(sticky)。

 RegExpオブジェクトはRegExp[@@species]というアクセサを持つ。通常派生オブジェクトを作る際にこれを使用する。サブクラスを作る際にこの挙動を書き換えることも可能。

 RegExp.prototypeプロパティは下記のプロパティ/メソッドを持つ。

RegExp.prototype.constructor    コンストラクタ。初期値は内部オブジェクト
RegExp.prototype.exec(string)	stringに対しマッチを行う
RegExp.prototype.flags	アクセサ。設定されているフラグを返す
RegExp.prototype.global	アクセサ。gフラグが設定されていればtrue
RegExp.prototype.ignoreCase	アクセサ。iフラグが設定されていればtrue
RegExp.prototype[@@match](string)	String.prototype.matchメソッド内で内部的に呼び出されるマッチ関数
RegExp.prototype.multiline	アクセサ。mフラグが設定されていればtrue
RegExp.prototype[@@replace](string, replaceValue)	String.prototype.replaceメソッド内で内部的に呼び出される置換関数
RegExp.prototype[@@search](string)	String.prototype.searchメソッド内で内部的に呼び出されるマッチ関数
RegExp.prototype.source	アクセサ。正規表現を返す
RegExp.prototype[@@split](string, limit)	String.prototype.splitメソッド内で内部的に呼び出されるマッチ関数
RegExp.prototype.sticky	アクセサ。yフラグが設定されていればtrue
RegExp.prototype.test(S)	Sに対しマッチを行い、マッチしたらtrueを返す
RegExp.prototype.toString()	正規表現を文字列として返す
RegExp.prototype.unicode	アクセサ。uフラグが設定されていればtrue

ECMAScript 2015の仕様書を読む(その13)

posted on 2016/05/11 00:42:56

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回はテキスト処理関連について規定する第21章のうち、Stringオブジェクトについて。

第21章1節

 Stringオブジェクトのコンストラクタは内部オブジェクトが割り当てられているが、サブクラス化可能になっており、Stringオブジェクトのサブクラスはコンストラクタ内でsuperキーワードを使ってStringコンストラクタを実行しインスタンスを作成しなければならない。

 なお、Stringオブジェクトを関数として実行すると引数を文字列に変換したものを返す。また、newキーワード付きで関数として実行すると、引数を値として格納したStringオブジェクトを返す。

 Stringオブジェクトは次のプロパティ/メソッドを持つ。

String.fromCharCode(...codeUnits)	codeUnitsに相当する文字コードを含む文字列を返す。codeUnitsはUnicodeで指定。
String.fromCodePoint(...codePoints)	codePointsに相当する文字コードを含む文字列を返す
String.prototype	内部オブジェクトを指す。変更不可
String.raw(template, ...substitutions)	テンプレートオブジェクトに対し与えられた引数を使って展開を行う。通常はタグ付けされたテンプレート処理のために利用される

 また、String.prototypeオブジェクトは次のプロパティ/メソッドを持つ。

String.prototype.charAt(pos)	posの位置にある文字を返す
String.prototype.charCodeAt(pos)	posの位置にある文字の文字コードを返す
String.prototype.codePointAt(pos)	posの位置にある文字のコードポイントを返す
String.prototype.concat(...args)	argsを連結した文字列を返す
String.prototype.constructor	コンストラクタ。内部オブジェクト
String.prototype.endsWith(searchString [, endPosition])	文字列がsearchStringで終わっていればtrueを返す。endPositionを指定した場合、文字列がその長さであるかのように処理を行う
String.prototype.(includes)sesarchString [, position])	文字列がsearchStringを含んでいればtrueを返す。positionが指定された場合、その位置から検索を開始する
String.prototype.indexOf(searchString [, position])	文字列中でsearchStringが最初に出現する位置を返す。positionが指定された場合、その位置から検索を開始する
String.prototype.lastIndexOf(searchString [, position])	文字列中でsearchStringが最後に出現する位置を返す。positionが指定された場合、その位置から検索を開始する
String.prototype.localeCompare(tha [, reserved1 [, reserved2]])	ECMA-402で規定されているlocaleCompare処理を行う。
String.prototype.match(regexp)	regexpを使ってマッチ処理を行う
String.prototype.normalize([form])	文字列を正規化したものを返す。formは"NFC"、"NFD"、"NFKC"、"NFKD"が指定可能
String.prototype.repeat(count)	文字列をcount回繰り返したものを返す
String.prototype.replace(searchValue, replaceValue)	serachValueをreplaceValueに置き換える。replaceValueには$、$1、、
、$n、$nnなどが指定可能
String.prototype.search(regexp)	文字列中でregexpにマッチした位置を返す
String.prototype.slice(start, end)	startの位置からendの位置までの部分文字列を返す。endが負の場合、文字列のlengthにendを足したものがendとして使われる
String.prototype.split(separator, limit)	separatorで文字列を分割する
String.prototype.startsWith(searchString [, position])	文字列がsearchStringで始まっているならtrueを返す。positionが指定されていた場合、その場所から検索を開始する
String.prototype.substring(start, end)	startの位置からendの位置までの部分文字列を返す。endがstartより小さい場合、endとstartは入れ替えられる
String.prototype.toLocaleLowerCase([reseved1 [, reserved2]])	ECMA-402で規定されているtoLocaseLowerCase処理を行う。
String.prototype.toLocaleUpperCase([reseved1 [, reserved2]])	ECMA-402で規定されているtoLocaseUpperCase処理を行う。
String.prototype.toLowerCase()	小文字に変換した文字列を返す
String.prototype.toString()	変換した文字列を返す
String.prototype.toUpperCase()	大文字に変換した文字列を返す
String.prototype.trim()	前後のホワイトスペースをものを返す
String.prototype.valueOf()	変換した文字列を返す
String.prototype[@@iterator]()	文字列のコードポイントを走査するためのiteratorを返す

 また、Stringインスタンスはその文字列の長さを格納するlengthプロパティを持つ。

 Stringはiteratorを使った走査にも対応している。このiteratorは、文字列をインデックス順に返す。

ECMAScript 2015の仕様書を読む(その12)

posted on 2016/05/03 00:59:30

 ECMAScript 2015の仕様書(ECMA-262)を読んでいます。今回はNumber、Math、Dateオブジェクトについて解説する第20章のうち、Dateオブジェクトについて。

第20章3節

 ECMAScriptでは基準時刻(UTC1970年1月1日)からのミリ秒で時刻を表現する。表現できるのはこの基準時刻±9,007,199,254,740,992(2の53乗)ミリ秒であり、これはおよそ±28万5,616年に相当する。ただし、実際にDateオブジェクトで扱えるのは1970年1月1日正午から±1億日(±8,640,000,000,000,000ミリ秒)。

 なお、1日は8640万ミリ秒。また、閏秒は考慮されないが、閏年は考慮される。月については0〜11(0が1月)の値で表現されるが、日は1〜31の値で表現される。曜日は0〜6(0が日曜日)。そのほか、ECMAScript処理系はタイムゾーンの処理や夏時間なども考慮する。

 ECMAScriptはISO 8601 Extended Formatベースのフォーマット仕様(YYYY-MM-DDTHH:mm:ss.sssZ)をサポートする。なお、年については最大6桁(および±)での表現が可能。

 Dateオブジェクトは、基準時刻からのミリ秒をそのオブジェクトの値として格納する。また、Dateオブジェクトのコンストラクタは内部オブジェクトになっている。このコンストラクタはサブクラス化が可能だが、その場合superキーワードを使ってDataコンストラクタをコンストラクタ内で呼び出す必要がある。

 デフォルトのDateコンストラクタは3つのパターンがある。どの場合もnewキーワードなしで呼ばれた場合、いかなる引数が与えられていても現在時刻に相当する文字列を返す。

 2つ以上の引数を取るケースは以下。この場合、引数で指定した日付時刻に相当するDateオブジェクトを返す。また、引数にNaNがあると「不正な時刻」に相当するDateオブジェクトを返す。

Date(year, month [, date [, hours [, minutes [, seconds [, ms]]]]])

 1つの引数を与えた場合、引数として与えられたオブジェクトが日付時刻値を格納していた場合はその日付時刻に相当するDateオブジェクトを、もし引数が文字列であり、かつ日付時刻としてパースできる場合はその日付時刻に相当するDatetオブジェクトを、そうでない場合は引数を数値に変換し、基準時刻にその数値を足した日付時刻に相当するDateオブジェクトを返す。

 引数が与えられなかった場合、現在の日付時刻に相当するDateオブジェクトを返す。

 Dateオブジェクトは次のメソッドを持つ。

Date.now()	基準時刻から現在時刻までの経過ミリ秒を返す
Date.parse(string)	引数を文字列としてパースし、基準時刻からその時刻までの経過ミリ秒を返す

 また、Dateオブジェクトのprototypeオブジェクトは下記のメソッド/プロパティを持つ。

Date.prototype.constructor	コンストラクタ
Date.prototype.getDate()	そのオブジェクトの日にちを返す(下記、同様)
Date.prototype.getDay()	
Date.prototype.getFullYear()	
Date.prototype.getHours()	
Date.prototype.getMilliseconds()	
Date.prototype.getMinutes()	
Date.prototype.getMonth	
Date.prototype.getSeconds()	
Date.prototype.getTime()	基準時刻からの経過ミリ秒を返す
Date.prototype.getTimezoneOffset()	UTCからローカル時刻へのオフセット(分)を返す
Date.prototype.getUTCDate()	そのオブジェクトのUTCでの日にちを返す(下記、同様)
Date.prototype.getUTCDay()
Date.prototype.getUTCFullYear()
Date.prototype.getUTCHours()
Date.prototype.getUTCMilliseconds()
Date.prototype.getUTCMinutes()
Date.prototype.getUTCMonth()
Date.prototype.getUTCSeconds()
Date.prototype.setDate(date)	そのオブジェクトの日付をdateに設定する(下記、同様)
Date.prototype.setFullYear(year [, month [, date]])
Date.prototype.setHours(hour [, min [, sec [, ms]]])
Date.prototype.setMilliseconds(ms)
Date.prototype.setMinutes(min [, sec [, ms]])
Date.prototype.setMonth(month [, date])	
Date.prototype.setSeconds(sec [, ms])	
Date.prototype.setTime(time)	
Date.prototype.setUTCDate(date)	そのオブジェクトのUTCでの日付をdateに設定する(下記、同様)
Date.prototype.setFUTCullYear(year [, month [, date]])
Date.prototype.setUTCHours(hour [, min [, sec [, ms]]])
Date.prototype.setUTCMilliseconds(ms)
Date.prototype.setUTCMinutes(min [, sec [, ms]])
Date.prototype.setUTCMonth(month [, date])	
Date.prototype.setUTCSeconds(sec [, ms])	
Date.prototype.toDateString()	相当する文字列を返す
Date.prototype.toISOString()	相当する文字列(ISO 8601 Extended Format)を返す
Date.prototype.toJSON(key)	JSONで使われる日付時刻文字列を返す
Date.prototype.toLocalDateString([ reserved1 [, reserved2]])	ローカル日付文字列を返す
Date.prototype.toLocalString([ reserved1 [, reserved2]])	ローカル文字列を返す
Date.prototype.toLocalTimeString([ reserved1 [, reserved2]])	ローカル時刻文字列を返す
Date.prototype.toString()	相当する文字列を返す
Date.prototype.toTimeString()	相当する時刻文字列を返す
Date.prototype.toUTCString()	相当するUTC文字列を返す
Date.prototype.valueOf()	基準時刻からの経過ミリ秒を返す
Date.prototype.toPrimitive[@@toPrimitive](hint)	相当するプリミティブ値を返す。hintは"default"もしくは"number"、"string"のどれか。"default"は"string"と同等。