本頁の目次 目次 次頁: 15-5_String_Objects 前頁: 15-3_Function_Objects
Array オブジェクトはプロパティ名のクラスに特別な扱いを与える。プロパティ名 P (文字列値形式) は、ToString(ToUint32(P)) と P が等しく、かつ ToUint32(P) と 232-1 が等しくない場合、配列のインデックスであり、かつこの場合に限られる。各 Array オブジェクトは length プロパティを持ち、その値は常に 232 未満の負でない整数\である。length プロパティの値は配列のインデックスである各プロパティ名よりも数値的に大きい; Array オブジェクトのプロパティが作成または変更されるときは、他のプロパティがこの不変を維持する必要からいつでも調整される。特別に、配列のインデックスのプロパティが追加されるときはいつでも、length プロパティは変更され、必要であれば、配列のインデックスの数値的な値より大きくなる; そして length プロパティが変更されるといつでも、新しい length 以上の値の配列インデックスの各プロパティは自動的に削除される。この制約は Array オブジェクト自身のプロパティにのみ適用され、length やその prototype から継承されうる配列インデックスプロパティによっては影響されない。
Array がコンストラクタとしてではなく関数として呼出されるならば、新規に Array オブジェクトを生成して初期化する。関数呼出し Array(...) は、同じ引数を持つオブジェクト生成式 new
Array(...) と等価である。
Array 関数が呼出されると、次のステップが取られる:
Array が new
式の一部として呼出されるとき、それはコンストラクタである; 新規に生成したオブジェクトを初期化する。
この説明は、引数を与えられないか、 2 つ以上与えられる Array コンストラクタに適用する。
新規に構築されたオブジェクトの [[Prototype]] プロパティは、 Array.prototype の初期値 (せくしょん 15.4.3.1) である、オリジナルの Array プロトタイプオブジェクトに設定される。
新規に構築されたオブジェクトの [[Class]] プロパティは、 "Array" に設定される。新規に構築されたオブジェクトの length プロパティは、引数の数に設定される。
新規に構築されたオブジェクトの 0 プロパティは、 (供給された) item0 に設定される; 新規に構築されたオブジェクトの 1 プロパティは、(もし供給されれば) item1 に設定される; そして、一般に、そこにあるのと同じだけの引数に対して、新規に構築されたオブジェクトの k プロパティは、第一引数を引数番号 0 と考えて引数 k に設定される。
新規に構築されるオブジェクトの [[Prototype]] プロパティは、Array.prototype (セクション 15.4.3.1) の初期値である、オリジナルの Array プロトタイプオブジェクトに設定される。新規に構築されるオブジェクトの [[Class]] プロパティは "Array" に設定される。
引数 len が Number で、かつ ToUint32(len) が len と等しければ、新規に構築されるオブジェクトの length プロパティは、 ToUint32(len) に設定される。引数 len が Number で、かつ ToUint32(len) か len と等しくなければ、例外 RangeError が投げられる。
引数 len が Number でなければ、新規に構築されるオブジェクトの length プロパティは 1 に設定され、新規に構築されるオブジェクトの 0 プロパティは、 len に設定される。
Array コンストラクタの内部 [[Prototype]] プロパティの値は、 Function プロトタイプオブジェクト (セクション 15.3.4) である。
内部プロパティ及び length プロパティ (値は 1 ) の他に、Array コンストラクタは次のプロパティを持つ:
Array.prototype の初期値は Array プロトタイプオブジェクト (セクション 15.4.4) である。
このプロパティは、属性 { DontEnum, DontDelete, ReadOnly } である。
Array プロトタイプオブジェクトの内部 [[Prototype]] プロパティの値は、 Object プロトタイプオブジェクト (セクション 15.2.3.1) である。
Array プロトタイプオブジェクトはそれ自身が配列である; その [[Class]] は "Array" で、 length プロパティ (初期値は +0) とセクション 15.4.5.1 に述べる特殊な内部 [[Put]] メソッドを持つ。
プロトタイプオブジェクトのプロパティである関数の説明において、以降フレーズ "このオブジェクト" は関数実施の this
値であるオブジェクトを参照する。内部 [[Class]] プロパティの値が "Array" でないオブジェクトであることが this
に許可される。
NOTE Array プロトタイプオブジェクトは独自の valueOf プロパティを持たない; だが、 valueOf プロパティを Object プロトタイプオブジェクトから継承する。
Array.prototype.constructor の初期値は、組込み Array コンストラクタである。
この関数の呼び出しの結果は、このオブジェクトに組込み join メソッドを引数無しで呼出すのと同様である。
toString
関数は汎用的ではない; this
値が Array オブジェクトでなければ、例外 TypeError を投げる。それゆえ、他の種類のオブジェクトにメソッドとして転用できない。
配列要素は toLocaleString
メソッドで文字列に変換され、それらの文字列は連結され、実装が定義するロケール特定の方法で引き出される分離子文字列で分離される。この関数の呼出しの結果は、 toString の結果に類似することが意図されるが、この関数の結果はロケール特定であることが意図される。
結果は次のように計算される:
toLocaleString
() を呼出す。toLocaleString
() を呼出す。toLocaleString
関数は汎用的ではない; this
値が Array オブジェクトでなければ、例外 TypeError を投げる。 それゆえ、他の種類のオブジェクトにメソッドとして転用できない。
NOTE この関数の第一パラメータは、この標準の将来のバージョンで使用される可能性がある; 実装はこのパラメータを他の用途に使用しないことを推奨する。
concat
メソッドが 0 個以上の引数 item1, item2, etc. で呼出されると、順に各引数の配列要素が続く、オブジェクトの配列要素で構成される配列を返す。
次のステップが取られる:
new
Array() と同様に生成された新規配列とする。concat
メソッドの length プロパティは 1 である。
NOTE concat
関数は故意にに汎用的である; this
値が Array オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。 concat
関数が host オブジェクトにうまく適用できるかどうかは、実装依存である。
配列要素は文字列に変換され、文字列は連結され、 separator で分離される。 separator が提供されないならば、 1 つのカンマが separator に用いられる。
join
メソッドは引数 separator をとり、次のステップを実行する:
join
メソッドの length プロパティは 1 である。
NOTE join
関数は故意に汎用的である; this
値が Array オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。 join
関数が host オブジェクトにうまく適用できるかどうかは、実装依存である。
配列の最後の要素が配列から取り除かれ、返される。
NOTE pop
関数は故意にに汎用的である; this
値が Array オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。 pop
関数が host オブジェクトにうまく適用できるかどうかは、実装依存である。
引数が出現した順に配列の末尾に追加される。呼出しの結果として、新しい配列の長さが返される。
push
メソッドが 0 個以上の引数 item1, item2, etc. で呼出されると、次のステップが取られる:
push
メソッドの length プロパティは 1 である。
NOTE push
関数は故意にに汎用的である; this
値が Array オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。 pust 関数が host オブジェクトにうまく適用できるかどうかは、実装依存である。
配列要素は順序を逆に再編される。呼出しの結果としてオブジェクトが返される。
NOTE reverse
関数は故意にに汎用的である; this
値が Array オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。 reverse
関数が host オブジェクトにうまく適用できるかどうかは、実装依存である。
配列の最初の要素が配列から取り除かれ、返される。
NOTE shift
関数は故意にに汎用的である; this
値が Array オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。 shift
関数が host オブジェクトにうまく適用できるかどうかは、実装依存である。
slice
メソッドは 2 つの引数、 start と end をとり、要素 start から要素 end の前まで (または、 end が undefined ならば配列の末尾まで) の配列要素で構成される配列を返す。 start が負ならば、 length を配列の長さとして、(length+start) として扱われる。 end が負ならば、length を配列の長さとして (length+end) として扱われる。 次のステップが取られる:
new
Array() と同様に生成した配列とする。slice
メソッドの length プロパティは 2 である。
NOTE slice
関数は故意にに汎用的である; this
値が Array オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。 slice
関数が host オブジェクトにうまく適用できるかどうかは、実装依存である。
配列要素はソート (並べ替え) される。ソートは必ずしも安定的ではない(つまり、等価と比較された要素が元の順で残るとは限らない). comparefn が undefined でないならば、それは 2 個の引数 x と y を受け付け、 x < y ならば負の値、 x = y ならば 0、 x > y ならば正の値を返す関数であるべきである。
comparefn が undefined でなく、かつ この配列の要素について首尾一貫した比較関数 (下記参照) でない場合、 ソートの振る舞いは実装依存である。 len を ToUint32(this.length) とする。下記の全条件を満たす整数 i 及び j と オブジェクト P が存在する場合、ソートの振る舞いは実装依存である:
this
は ToString(i) という名前のプロパティを持たない。this
で始まる 1 個以上の [[Prototype]] プロパティを辿ることによって取得される。そうでなければ次のステップが取られる.
返されるオブジェクトは、次の 2 個のプロパティを持たなければならない。
new
[π(j)] は old[j], と全く同じ値であり、プロパティ old[j] が存在しないならば、 new
[π(j)] は存在しないような、0 以上 Result(2) 未満の整数の数学的順列 π が存在しなければならない。ここでは、表記 old[j] でこの関数の実行前のこのオブジェクトの [[Get]] メソッドの引数 j での呼出しの仮の結果を参照し、 表記 new
[j] でこの関数の実行後のこのオブジェクトの [[Get]] メソッドの引数 j での呼出しの仮の結果を参照する。
下記の必要条件の全てが集合 S 内の値 a, b, c (または同じ値) 全てについて満たされる場合、値の集合 S について関数 comparefn は首尾一貫した比較関数である: 記法 <CF b は comparefn(a,b) < 0 を意味する; a =CF b は comparefn(a,b) = 0 (of either sign) を意味する; a >CF b は comparefn(a,b) > 0 を意味する。
NOTE 上の条件は、 comparefn が集合 S を等価な種別に分割し、その等価な種別が全く整然としているのを保証にするのに、必要かつ十分である。
SortCompare 演算子が 2 個の引数 j と k で呼出されると、次のステップが取られる:
NOTE 存在しないプロパティの値は、常に undefined プロパティ値より大きく比較し、 undefined は他の値よりも大きいと比較するため、 undefined プロパティ値は常に結果の末尾にソートし、存在しないプロパティの値が続く。
NOTE sort
関数は故意にに汎用的である; this
値が Array オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。 sort
関数が host オブジェクトにうまく適用できるかどうかは、実装依存である。
splice
メソッドが 2 個以上の引数 start, deleteCount, そして(選択的に) item1, item2, etc. で呼出されると、配列の添え字 start から始まる deleteCount 個の配列要素が、引数 item1, item2, etc で置換される。次のステップが取られる:
new
Array() と同様に生成した配列とする。splice
メソッドの length プロパティは 2 である。
NOTE splice
関数は故意にに汎用的である; this
値が Array オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。 splice
関数が host オブジェクトにうまく適用できるかどうかは、実装依存である。
配列内の順所が引数リスト内に出現順と同じになるように、引数が配列の先頭に prepend される。
unshift
メソッドが 0 個以上の引数 item1, item2, etc. で呼出されると、次のステップが取られる:
unshift
メソッドの length プロパティは 1 である。
NOTE unshift
関数は故意にに汎用的である; this
値が Array オブジェクトであることを要求されない。それゆえ、他の種類のオブジェクトにメソッドとして転用可能である。 unshift
関数が host オブジェクトにうまく適用できるかどうかは、実装依存である。
Array インスタンスは、 Array プロトタイプオブジェクトからプロパティを継承し、そして次のプロパティも持つ。
Array オブジェクトは変化した [[Put]] メソッドを用いて他の Native ECMAScript オブジェクトのために使用される。
A を Array オブジェクト、 P を文字列と想定する。
A の [[Put]] メソッドが、プロパティ P と値 V で呼出されるとき、次のステップが取られる:
Array オブジェクトの length プロパティは、配列の添え字を名前とする各プロパティの名前より、常に数値的に大きい。
length プロパティは属性 { DontEnum, DontDelete } を持つ。