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