訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
Arrayプロトタイプオブジェクトの内部プロパティ[[Prototype]]の値は、標準組み込みObjectプロトタイプオブジェクト(15.2.4)です。 Arrayプロトタイプオブジェクトは、それ自身の配列であり、その(内部プロパティ)[[Class]]が、"Array"で且つ、(初期値が+0である)lengthプロパティと 15.4.5.1 で説明した特殊な[[DefineOwnProperty]]内部メソッドを持ちます。 次のArrayプロトタイプオブジェクトのプロパティである関数の説明については、フレーズ「 this オブジェクト」は、関数の呼び出しにおいて this 値であるオブジェクトを参照します。 内部プロパティ[[Class]]の値が、"Array"ではないオブジェクトとする為に this が許容されます。 [注釈] Arrayプロトタイプオブジェクトは、その自身の valueOf プロパティは持ちませんが、標準組み込みObjectプロトタイプオブジェクトから valueOf プロパティを継承します。
Array.prototype.constructorの初期値は、標準組み込みArrayコンストラクタです。
toStringメソッドが呼ばれる際には、次のステップが取られます。
1. array は、this 値上でToObjectを呼んだ結果とする 2. func は、引数"join"を伴う内部メソッド[[Get]]を呼んだ結果とする 3. IsCallable(func) が、 falseである場合、 func は、標準組み込みメソッド Object.prototype.toString (15.2.4.2)とする 4. this 値とカラの引数のリストとして array を提供して func の内部メソッド[[Call]]を呼んだ結果を返す
[注釈] toString関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることは要求されません。 その為、メソッドとしての使用において他の種類のオブジェクトに転送することができます。 toString関数が、ホストオブジェクトにうまく適用することが可能かどうかについては、実装依存です。
配列の要素は、それらの toLocaleString メソッド、そしてまた実装定義のロケール仕様の方法の中で使用されている文字列の区切りの出現によって連結、分割される場合のこれら文字列を使用して文字列に変換されます。 この関数を呼んだ結果は、ロケール仕様になることが意図されるこの関数の結果を除き、toStringの結果と類似したものになることが意図されます。 結果は、次のように計算されます。
1. array は、引数として this 値を渡して ToObject を呼んだ結果とする 2. arrayLen は、引数"length"を伴う配列の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(arrayLen) とする 4. separator は、ホスト環境の(実装定義による方法で使用される)現在のロケールにおいて適切なリストセパレータ文字列におけるString値とする 5. len が、ゼロである場合、カラの文字列を返す 6. firstElement は、引数"0"を伴う array の内部メソッド[[Get]]を呼んだ結果とする 7. firstElement が、 undefined や nullである場合、 a. R は、カラの文字列とする 8.それ以外の場合、 a. elementObj は、 ToObject(firstElement) とする b. func は、引数"toLocaleString"を伴う elementObj の内部メソッド[[Get]]を呼んだ結果とする c. IsCallable(func) が、 falseである場合、TypeError例外を投げる(スローする) d. R は、this 値として elementObj とカラの引数リストを提供して func の内部メソッド[[Call]]を呼んだ結果とする 9. k は、1とする 10. while k < len という条件下で繰り返す a. S は、R とセパレータを連結することによって生成したString値とする b. nextElement は、引数ToString(k)を伴う array の内部メソッド[[Get]]を呼んだ結果とする c. nextElement が、 undefined または、 nullである場合、 i. R は、カラの文字列とする d.それ以外の場合、 i. elementObj は、 ToObject(nextElement) とする ii. func は、引数"toLocaleString"を伴う elementObj の内部メソッド[[Get]]を呼んだ結果とする iii. IsCallable(func) が、 falseである場合、TypeErrorを投げる(スローする) iv. R は、this値として elementObj とカラの引数リストを提供して funcの内部メソッド[[Call]]を呼んだ結果とする e. R は、S と R を連結することによって生成した文字列値とする f. k を1で増分する 11. R を返す
[注釈 1] この関数の1つめのパラメータは、この標準仕様の将来バージョンで使用されることになるかもしれません。 つまり、実装は、いかなる場合にもこのパラメータ位置を使用しないことが推奨されます。 [注釈 2] toLocaleString関数は、汎用化されることが意図され、その this 値がArrayオブジェクトとなることは要求されません。 その為、メソッドとしての使用においては、他の種類のオブジェクトに転送することが可能です。 toLocaleString関数が、うまくホストオブジェクトに適用されることが可能か否かについては、実装依存です。
concatメソッドは、ゼロ個以上の引数 item1, item2,...を伴って呼ばれる際には、順番に引数ごとの配列要素によって続くオブジェクトの配列要素を連結した配列を返します。 (concatメソッドでは、)次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. A は、その名を持つ標準組み込みコンストラクタであるArrayを式 new Array() によるものであるかのように新たに生成した配列とする 3. n は、0とする 4. items は、この関数呼び出しについて渡された引数を左から右の順に1つめの要素が0である次の要素を持つ内部リストとする。 5. items がカラでない間、繰り返す a. items から1つめの要素を削除し、 E は、当該要素の値とする b. E の内部プロパティ[[Class]]の値が、"Array"である場合、 i. k は、 0とする ii. len は、引数"length"を伴う E の内部メソッド[[Get]]を呼んだ結果とする iii. while k < len という条件下で繰り返す 1. P は、 ToString(k) とする 2. exists は、 P を伴う E の内部メソッド[[HasProperty]]を呼んだ結果とする 3. exists が、 trueである場合、 a subElement は、引数 P を伴う E の内部メソッド[[Get]]を呼んだ結果とする b 引数ToString(n)、プロパティ記述子 {[[Value]]: subElement, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}、 falseを伴う A の内部メソッド[[DefineOwnProperty]]を呼ぶ 4. nを1で増分する 5. kを1で増分する c. E が、 Arrayではない場合、 i.引数ToString(n)、プロパティ記述子 {[[Value]]: E, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}、 falseを伴う A の内部メソッド[[DefineOwnProperty]]を呼ぶ ii. nを1で増分する 6. A を返す
concatメソッドのlength プロパティは、1です。 [注釈] concat関数は、汎用化されることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての利用においてオブジェクトの他の種類に転送されることが可能です。 concat関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
配列の要素は、文字列に変換され、これらの文字列は、セパレータの出現によって連結、分割されます。 セパレータが一切提供されない場合、1つのカンマが、セパレータとして利用されます。 joinメソッドは、1つの引数とセパレータを取り、次のステップを実行します。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenVal は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenVal) とする 4. separator が、 undefinedである場合、separator は、1文字の文字列","とする 5. sep は、 ToString(separator) とする 6. len が、ゼロである場合、カラの文字列を返す 7. element0 は、引数"0"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 8. element0 が、undefined または nullである場合、 R は、カラの文字列とし、それ以外の場合、R は、 ToString(element0) とする 9. k は、 1とする 10. while k < len という条件下で繰り返す a. S は、 R と sep を連結することによって生成したString値とする b. element は、引数 ToString(k) を伴う O の内部メソッド[[Get]]を呼んだ結果とする c. element が、undefined または、 nullである場合、 next は、カラの文字列とし、それ以外の場合、next は、ToString(element) とする d. R は、 S と next を連結することによって生成した文字列値とする e. kを1で増分する 11. R を返す
joinメソッドのlengthプロパティは、1です。 [注釈] join関数は、汎用的であることが意図され、その this 値をArrayオブジェクトとすることは要求されません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 join関数がホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
配列の最後の要素が、配列から削除されて返されます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenVal は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、ToUint32(lenVal) とする 4. len がゼロである場合、 a.引数"length"、0、trueを伴う O の内部メソッド[[Put]]を呼ぶ b. undefinedを返す 5.それ以外の場合、 len > 0 という条件を満たし a. indx は、 ToString(len-1) とする b. elementは、引数 indx を伴う O の内部メソッド[[Get]]を呼んだ結果とする c.引数 "length" と indx 、trueを伴う O の内部メソッド[[Delete]]を呼ぶ d.引数 "length" と indx 、trueを伴う O の内部メソッド[[Put]]を呼ぶ e. element を返す
[注釈] pop関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 pop関数がホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
引数が、現れる順に配列の最後尾に追加されます。 新たな配列の長さが、呼んだ結果として返されます。 pushメソッドが、ゼロ個以上の引数 item1, item2,...を伴って呼ばれる場合、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenVal は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. n は、 ToUint32(lenVal) とする 4. items は、左から右の順にこの関数呼び出しの為に渡された引数を要素として持つ内部リストとする 5. items がカラでない間、繰り返す a. itemsから1つめの要素を削除し、E は、要素の値とする b.引数ToString(n)、E、trueを伴う O の内部メソッド[[Put]]を呼ぶ c. n を1で増分する 6.引数"length"、n、trueを伴う O の内部メソッド[[Put]]を呼ぶ 7. n を返す
pushメソッドの length プロパティは1です。 [注釈] push関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 push関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
配列の要素が、その逆順であるものとして再編成(並び替え)されます。 オブジェクトは、呼んだ結果として返されます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenVal は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenVal) とする 4. middle は、 floor(len/2) とする 5. lower は、 0 とする 6. lower ≠ middleである間、繰り返す a. upper は、len-lower-1 とする b. upperP は、 ToString(upper) とする c. lowerP は、 ToString(lower) とする d. lowerValue は、引数 lowerP を伴う O の内部メソッド[[Get]]を呼んだ結果とする e. upperValue は、引数 upperP を伴う O の内部メソッド[[Get]]を呼んだ結果とする f. lowerExists は、引数 lowerP を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする g. upperExists は、引数 upperP を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする h. lowerExists が、true で且つ、 upperExists が、trueである場合、 i.引数 lowerP、upperValue、trueを伴う O の内部メソッド[[Put]]を呼ぶ ii.引数 upperP、lowerValue、trueを伴う O の内部メソッド[[Put]]を呼ぶ i. lowerExists が、 false 且つ、 upperExists が、trueである場合、 i.引数 lowerP、upperValue、trueを伴う O の内部メソッド[[Put]]を呼ぶ ii.引数 upperP、trueを伴う O の内部メソッド[[Delete]]を呼ぶ j. lowerExists が、 true 且つ、 upperExists が、 falseである場合、 i.引数 lowerP、trueを伴う O の内部メソッド[[Delete]]を呼ぶ ii.引数 upperP、lowerValue、trueを伴う O の内部メソッド[[Put]]を呼ぶ k.それ以外の場合、 lowerExists と upperExists は共にfalseであり、 i.要求される動作は何もない l.lower を1で増分する 7. O を返す
[注釈] reverse関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 reverse関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
配列の先頭の要素が、当該配列から削除されて返されます。
1. O は、引数としてその this 値を渡して ToObject を呼んだ結果とする 2. lenVal は引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenVal) とする 4. len がゼロである場合、 a.引数"length"、0、trueを伴う O の内部メソッド[[Put]]を呼ぶ b. undefined を返す 5. first は、引数"0"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 6. k は、1とする 7. while k < len という条件下で繰り返す a. from は、 ToString(k) とする b. to は、 ToString(k-1) とする c. fromPresent は、引数 fromを伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする d. fromPresent が、 trueである場合、 i. fromVal は、引数 from を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii.引数 to、fromVal、trueを伴う O の内部メソッド[[Put]]を呼ぶ e.それ以外の場合、 fromPresent は、 falseであり、 i.引数 to と trueを伴う O の内部メソッド[[Delete]]を呼ぶ f. k を1で増分する 8.引数 ToString(len-1) と true を伴う O の内部メソッド[[Delete]]を呼ぶ 9.引数"length"、(len-1)、trueを伴う O の内部メソッド[[Put]]を呼ぶ 10. first を返す
[注釈] shift関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 shift関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
sliceメソッドは、 start と end という2つの引数を取り、配列の要素の(文字位置) start から最後(文字位置 end )までを含んでいる配列の要素全てを返しますが、要素が含まれていない場合には末尾の要素(、最後尾がundefinedである場合、配列の末尾まで)を返します。 startが、負の値である場合、配列の長さである length は、 length + start として扱われます。 endが、負の値である場合、配列の長さである length は、 length + end として扱われます。 (sliceメソッドは、)次のステップを取ります。
1. O は、引数としてその this 値を渡して ToObject を呼んだ結果とする 2. A は、その名を伴う標準組み込みコンストラクタであるArrayを式 new Array() によるかのように生成した新たな配列とする 3. lenVal は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 4. len は、 ToUint32(lenVal) とする 5. relativeStart は、 ToInteger(start) とする 6. relativeStart が、負の値である場合、 k は、 max((len + relativeStart),0) とし、それ以外の場合、k は、 min(relativeStart, len) とする 7. end が、 undefinedである場合、 relativeEnd は、 len とし、それ以外の場合、 relativeEnd は、 ToInteger(end) とする 8. relativeEnd が、負の値である場合、 final は、max((len + relativeEnd),0) とし、それ以外の場合、final は、 min(relativeEnd, len) とする 9. n は、0 とする 10. while k < final という条件下で繰り返す a. Pk は、 ToString(k) とする b. kPresent は、引数 Pk を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする c. kPresent が、 trueである場合、 i. kValue は、引数 Pk を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii 引数 ToString(n)、プロパティ記述子 {[[Value]]: kValue, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}、 falseを伴う A の内部メソッド[[DefineOwnProperty]]を呼ぶ d. k を1で増分する e. n を1で増分する 11. A を返す
sliceメソッドのlengthプロパティは、2です。 [注釈] slice関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 slice関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
この配列の要素が、並べ替えられます(ソートされます)。 sortは、安定している必要はありません。(つまり、それは、等価性を比較する要素が、元の順番のままである必要はないということです。) comparefn が、undefinedである場合、 x と y という2つの引数を許容し、 x < y である場合、負の値、 x = y である場合、ゼロ、または、 x > y である場合、正の値を返すような関数とすべきです。 obj は、引数として this 値を渡して ToObject を呼んだ結果とします。 len は、引数"length"を伴う obj の内部メソッド[[Get]]を呼んだ結果をUint32に適用した結果とします。 comparefn が、undefinedではない場合、この配列(以下参照)の要素として一貫性のない比較関数におけるソートの動作は、実装定義です。 proto は、 obj の内部プロパティ[[Prototype]]の値とします。 proto が、 nullでなく、且つ、以下の条件の全てが満たされるような整数 j が存在する場合、ソートの動作は、実装定義です。
ソートの動作は、obj が、sparse で且つ、次の条件の一部が、trueである場合も実装定義とされます。
ソートの動作は、アクセサプロパティまたは、[[Writable]]属性を持つデータプロパティである len より小さい非負の整数である名称を持つ obj の配列インデックスプロパティの一部が、falseである場合にも実装定義とされます。 それ以外の場合には、次のステップが取られます。
1. obj の内部メソッド[[Get]]、[[Put]]や[[Delete]]と(以下で説明した) SortCompare を呼ぶ実装定義の並びを実行 SortCompare は、len より小さく、内部メソッド[[Get]]を呼ぶ前の結果である SortCompare を呼ぶ為の引数である非負の整数である[[Get]]、[[Put]]や[[Delete]]を呼ぶごとの最初の引数 obj が、 sparse ではない場合、[[Delete]]は、呼ばれてはいけない 2. obj を返す
返したオブジェクトは、次の2つのプロパティを持っていなければいけません。
これは、表記法 old[ j ] は、この関数が実行される前に引数 j を伴う obj の内部メソッド[[Get]]を呼んだ結果と仮定して参照する為に使用され、表記法 new[ j ] は、この関数が実行された後、引数 j を伴う obj の内部メソッド[[Get]]を呼んだ結果と仮定して参照する為に使用されるということです。 関数 comparefn は、以下の要求の全てが、集合 S にある(可能な限り同じ値である)a、b、cという値全てに遭遇する場合、 表記法 a < CF b は、comparefn( a , b ) < 0 を a = CF b は、 comparefn( a , b ) = 0 (何れかの符号の0)を意味し、 また、 a > CF b は、 comparefn( a , b ) > 0 を意味します。
[注釈] 上記条件は、等価クラスと完全に順序づけされる等価クラスにおける集合 S を分割する comparefn を確保するに当たり必要十分です。 SortCompare抽象操作は、j と k という2つの引数を伴って呼ばれる際には、次のステップが取られます。
1. jString は、 ToString(j) とする 2. kString は、 ToString(k) とする 3. hasj は、引数 jStringを伴う obj の内部メソッド[[HasProperty]]を呼んだ結果とする 4. hask は、引数 kStringを伴う obj の内部メソッド[[HasProperty]]を呼んだ結果とする 5. hasj と hask が、共に falseである場合、+0を返す 6. hasj が、 falseである場合、1を返す 7. hask が、 falseである場合、-1を返す 8. x は、引数 jStringを伴う obj の内部メソッド[[Get]]を呼んだ結果とする 9. y は、引数 kStringを伴う obj の内部メソッド[[Get]]を呼んだ結果とする 10. x と y が共に undefined である場合、+0を返す 11. x が、 undefinedである場合、1を返す 12. y が、 undefinedである場合、-1を返す 13.引数 comparefn が、undefinedではない場合、 a. IsCallable(comparefn) が、 falseである場合、TypeError例外を投げる(スローする) b. this 値として undefined と引数 x と y を渡して comparefn の内部メソッド[[Call]]を呼んだ結果を返す 14. xString は、 ToString(x) とする 15. yString は、 ToString(y) とする 16. xString < yStringである場合、-1を返す 17. xString > yStringである場合、1を返す 18. +0を返す
[注釈 1] 存在しないプロパティ値は、常に undefined プロパティ値よりも大きいものとして比較し、 undefined は、常に他のいかなる値より大きいものとして比較する為、 undefined プロパティ値は、常に存在しないプロパティ値が続いた結果の終わりまでソートします。 [注釈 2] sort関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 sort関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
spliceメソッドが、 start、deleteCount、(オプションとして) item1、item2... のように2つ以上の引数を伴って呼ばれる際には、配列インデックスの start (位置)で始まる配列の deleteCount 要素は、引数 item1、item2...等々によって置換されます。 削除済み要素を含んでいるArrayオブジェクトは、(もし、何かあれば)返されます。 (spliceメソッドは、)次のステップが取られます。
1. O は、引数としてその this 値を渡して ToObject を呼んだ結果とする 2. A は、その名を持つ標準組み込みコンストラクタである Array を式 new Array() によるかのように生成した新たな配列とする 3. lenVal は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 4. len は、 ToUint32(lenVal) とする 5. relativeStart は、 ToInteger(start) とする 6. relativeStart が、負の値である場合、 actualStart は、 max((len + relativeStart),0) とし、それ以外の場合、 actualStart は、 min(relativeStart, len) とする 7. actualDeleteCount は、 min(max(ToInteger(deleteCount),0), len - actualStart) とする 8. k は、0とする 9. while k < actualDeleteCount の条件下で繰り返す a. from は、 ToString(actualStart+k) とする b. fromPresent は、引数 from を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする c. fromPresent が、 trueである場合、 i. fromValue は、引数 from を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii.引数 ToString(k) 、プロパティ記述子 {[[Value]]: fromValue, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}、 falseを伴う A の内部メソッド[[DefineOwnProperty]]を呼ぶ d. kを1で増分する 10. items は、item1を伴う実際の配列リストの開始の位置において左から右への順とした要素を持つ内部リストとし、list は、そのような items が何も存在しない場合、カラとする 11. itemCount は、 items にある要素数とする 12. itemCount < actualDeleteCount である場合、 a. k は、 actualStart とする b. while k < (len - actualDeleteCount) という条件下で繰り返す i. from は、 ToString(k+actualDeleteCount) とする ii. to は、 ToString(k+itemCount) とする iii. fromPresent は、引数 from を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする iv. fromPresent が、 trueである場合、 1. fromValue は、引数 from を伴う O の内部メソッド[[Get]]を呼んだ結果とする 2.引数 to、fromValue、true を伴う O の内部メソッド[[Put]]を呼ぶ v.それ以外の場合、 fromPresent は、 false であり、 1.引数 to、true を伴う O の内部メソッド[[Delete]]を呼ぶ vi. k を1で増分する c. k は、len とする d. while k > (len - actualDeleteCount + itemCount) という条件下で繰り返す i.引数 ToString(k-1)、true を伴う O の内部メソッド[[Delete]]を呼ぶ ii. k を1で減分する 13. itemCount > actualDeleteCount である場合、 a. k は、 (len - actualDeleteCount) とする b. while k > actualStart という条件下で繰り返す i. from は、 ToString(k + actualDeleteCount - 1) とする ii. to は、 ToString(k + itemCount - 1) とする iii. fromPresent は、引数 from を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする iv. fromPresent が、 true である場合、 1. fromValue は、引数 from を伴う O の内部メソッド[[Get]]を呼んだ結果とする 2.引数 to、fromValue、true を伴う O の内部メソッド[[Put]]を呼ぶ v.それ以外の場合、 fromPresent は、 false であり、 1.引数 to と trueを伴う O の内部メソッド[[Delete]]を呼ぶ vi. k を1で減分する 14. k は、 actualStart とする 15. items がカラでない間、繰り返す a. items から1つめの要素を削除し、 E は、当該要素の値とする b.引数 ToString(k)、E、true を伴う O の内部メソッド[[Put]]を呼ぶ c. k を1で増分する 16.引数 "length"、(len - actualDeleteCount + itemCount)、true を伴う O の内部メソッド[[Put]]を呼ぶ 17. A を返す
spliceメソッドの length プロパティは、2です。 [注釈] splice関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 splice関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
引数が、引数リスト内に現れるのと同じ順である配列内でそのようなそれらの順である配列の先頭に付加されます。 unshiftメソッドが、 item1、item2...といったゼロ個以上の引数を伴って呼ばれる際には、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenVal は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenVal) とする 4. argCount は、実際の引数の数とする 5. k は、 len とする 6. while k > 0 という条件下で繰り返す a. from は、 ToString(k-1) とする b. to は、 ToString(k+argCount - 1) とする c. fromPresent は、引数 from を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする d. fromPresent が、 trueである場合、 i. fromValue は、引数 from を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii.引数 to、fromValue、true を伴う O の内部メソッド[[Put]]を呼ぶ e.それ以外の場合、 fromPresent は、 false であり、 i.引数 to、true を伴う O の内部メソッド[[Delete]]を呼ぶ f. k を1で減分する 7. j は、0とする 8. items は、呼び出されるこの関数を渡された引数を左から右の順とした要素を持つ内部リストとする 9. items がカラでない間、繰り返す a. items から1つめの要素を削除し、 E は、当該要素の値とする b.引数 ToString(j)、E、trueを伴う O の内部メソッド[[Put]]を呼ぶ c. j を1で増分する 10.引数"length"、len+argCount、trueを伴う O の内部メソッド[[Put]]を呼ぶ 11. len+argCount を返す
unshiftメソッドの length プロパティは、1です。 [注釈] unshift関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 unshift関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
indexOf は、内部Strict Equality Comparison Algorithm/厳密等価比較アルゴリズム (11.9.6)を使用して1つ以上の位置を見つけた場合、昇順で searchElement と配列の要素を比較し、そのような位置の最初のインデックスを返し、それ以外は、-1を返します。 オプションである2つめの引数 fromIndex の既定値は、0 (配列全体は検索済みの状態)です。 (indexOfの結果が、)配列の大きさより大きいか等しい場合、-1が返され、この時、配列は検索済みではないでしょう。 それ(結果)が、負の値である場合、オフセット値として fromIndex を算出する為、配列の末尾から使用されます。 算出したインデックス値が、0より小さい場合、配列全体は、検索済みでしょう。 indexOfメソッドが、1つまたは2つの引数を伴って呼ばれる際には、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenValue は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenValue) とする 4. len が、 0である場合、-1 を返す 5.引数 fromIndex が、解析された場合、n は、 ToInteger(fromIndex) とし、それ以外の場合、n は、0とする 6. n ≧ len である場合、 -1 を返す 7. n ≧ 0 である場合、 a. k は、 n とする 8.それ以外の場合、 n < 0 であり、 a. k は、 len - abs(n) とする b. k が、0よりも小さい場合、k は、0とする 9. while k < len という条件下で繰り返す a. kPresent は、引数 ToString(k) を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする b. kPresent が、 trueである場合、 i. elementK は、引数 ToString(k) を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii. same は、 searchElement と elementK に厳密等価比較アルゴリズムを適用した結果とする iii. same が、 trueである場合、 k を返す c. k を1で増分する 10. -1 を返す
indexOfメソッドの length プロパティは、1です。 [注釈] indexOf関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 indexOf関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
lastIndexOf は、内部Strict Equality Comparison Algorithm/厳密等価比較アルゴリズム (11.9.6)を使用して1つ以上の位置を見つけた場合、降順で searchElement と配列の要素を比較し、そのような位置の最後のインデックスを返し、それ以外は、-1を返します。 オプションである2つめの引数 fromIndex の既定値は、配列の大きさ - 1 (配列全体は検索済みの状態)です。 (lastIndexOfの結果が、)配列の大きさより大きいか等しい場合、配列全体が検索されます。 それ(結果)が、負の値である場合、オフセット値として fromIndex を算出する為、配列の末尾から使用されます。 算出したインデックス値が、0より小さい場合、-1が返されます。 lastIndexOfメソッドが、1つまたは2つの引数を伴って呼ばれる際には、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenValue は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenValue) とする 4. len が、 0 である場合、-1 を返す 5.引数 fromIndex が解析された場合、n は、ToInteger(fromIndex) とし、それ以外の場合、n は、len-1 とする 6. n ≧ 0 である場合、 k は、 min(n, len - 1) とする 7.それ以外の場合、 n < 0 であり、 a. k は、 len - abs(n) とする 8. while k ≧ 0 という条件下で繰り返す a. kPresent は、引数 ToString(k) を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする b. kPresent が、 true である場合、 i. elementK は、引数 ToString(k) を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii. same は、 searchElement と elementK に厳密等価比較アルゴリズムを適用した結果とする iii. same が、 true である場合、k を返す c. k を1で減分する 9. -1 を返す
lastIndexOfメソッドの length プロパティは 1です。 [注釈] lastIndexOf関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 lastIndexOf関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
callbackfn は、3つの引数を許容する関数とすべきであり、Boolean値 true、または、false に強制変換する値を返します。 every(メソッド) は、 falseを返す callbackfn を見つけるまで、昇順で、配列内にある要素ごとに1度 callbackfn を呼びます。 そのような要素が見つけられるごとに every(メソッド) は、すぐに falseを返します。 それ以外の場合、 callbackfn が、全ての要素において trueを返す場合には、 every(メソッド) は、 trueを返すでしょう。 callbackfn は、実際に存在する配列の要素についてのみ呼ばれ、欠落した配列の要素については呼ばれません。 thisArg パラメータが提供される場合、それは、 callbackfn として呼び出されるごとに this 値として使用されるでしょう。 それが提供されない場合には、代わりに undefined が使用されます。 callbackfn は、要素の値、要素のインデックス、走査中のオブジェクトの3つの引数を伴って呼ばれます。 every(メソッド) は、 callbackfn を呼ぶことによって、呼ばれつつもオブジェクトが変異する可能性がある場合、当該オブジェクトを直接変異させることはありません。 every(メソッド)によって処理した要素の範囲は、 callbackfn を最初に呼ぶ前に設定されます。 every(メソッド)の開始をコールした後、配列に追加される要素には、もう callbackfn が訪れることはありません。 存在する配列の要素が、変更される場合、 callbackfn を解析したものとしたそれらの値は、 every(メソッド)がそれらを訪れる時点での値となるでしょう。 every(メソッド)の開始呼び出しの後や訪問される前に削除される要素は、もう訪問されることはありません。 every(メソッド)は、数学上の量指定子"for all"のように動作します。 特にカラの配列については、それは、trueを返します。 every メソッドが1つまたは2つの引数を伴って呼ばれる際には、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenValue は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenValue) とする 4. IsCallable(callbackfn) が、 falseである場合、TypeError例外を投げる(スローする) 5. thisArg が提供される場合、 T は、 thisArg とし、それ以外の場合、 T は、undefinedとする 6. k は、 0 とする 7. while k < len という条件下で繰り返す a. Pk は、 ToString(k) とする b. kPresent は、引数 Pk を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする c. kPresent が、 trueである場合、 i. kValue は、引数 Pk を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii. testResult は、 this 値としての T と kValue、k、O を含む引数リストを伴う callbackfn の内部メソッド[[Call]]を呼んだ結果とする iii. ToBoolean(testResult) が、 false である場合、falseを返す d. kを1で増分する 8. true を返す
everyメソッドの length プロパティは、1です。 [注釈] every関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 every関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
callbackfn は、3つの引数を許容する関数とすべきであり、Boolean値 true、または、false に強制変換する値を返します。 some(メソッド) は、 trueを返す callbackfn を見つけるまで、昇順で、配列内にある要素ごとに1度 callbackfn を呼びます。 そのような要素が見つけられるごとに some(メソッド) は、すぐに trueを返します。 それ以外の場合、 some(メソッド) は、 falseを返します。 callbackfn は、実際に存在する配列の要素についてのみ呼ばれ、欠落した配列の要素については呼ばれません。 thisArg パラメータが提供される場合、それは、 callbackfn として呼び出されるごとに this 値として使用されるでしょう。 それが提供されない場合には、代わりに undefined が使用されます。 callbackfn は、要素の値、要素のインデックス、走査中のオブジェクトの3つの引数を伴って呼ばれます。 some(メソッド) は、 callbackfn を呼ぶことによって、呼ばれつつもオブジェクトが変異する可能性がある場合、当該オブジェクトを直接変異させることはありません。 some(メソッド)によって処理した要素の範囲は、 callbackfn を最初に呼ぶ前に設定されます。 some(メソッド)の開始をコールした後、配列に追加される要素には、もう callbackfn が訪れることはありません。 存在する配列の要素が、変更される場合、 callbackfn を解析したものとしたそれらの値は、 some(メソッド)がそれらを訪れる時点での値となるでしょう。 some(メソッド)の開始呼び出しの後や訪問される前に削除される要素は、もう訪問されることはありません。 some(メソッド)は、数学上の量指定子"exists"のように動作します。 特にカラの配列については、それは、falseを返します。 someメソッドが1つまたは2つの引数を伴って呼ばれる際には、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenValue は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenValue) とする 4. IsCallable(callbackfn) が、 falseである場合、TypeError例外を投げる(スローする) 5. thisArg が提供された場合、 T は、 thisArg とし、それ以外の場合、 T は、undefinedとする 6. k は、 0 とする 7. while k < len という条件下で繰り返す a. Pk は、 ToString(k) とする b. kPresent は、引数 Pk を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする c. kPresent が、 trueである場合、 i. kValue は、引数 Pk を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii. testResult は、 this 値としての T と kValue、k、O を含む引数リストを伴う callbackfn の内部メソッド[[Call]]を呼んだ結果とする iii. ToBoolean(testResult) が、 true である場合、trueを返す d. kを1で増分する 8. false を返す
someメソッドの length プロパティは、1です。 [注釈] some関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 some関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
callbackfn は、3つの引数を許容する関数とすべきです。 forEach(メソッド) は、昇順で配列内にある要素ごとに1度 callbackfn を呼びます。 callbackfn は、実際に存在する配列の要素についてのみ呼ばれ、欠落した配列の要素については呼ばれません。 thisArg パラメータが提供される場合、それは、 callbackfn として呼び出されるごとに this 値として使用されるでしょう。 それが提供されない場合には、代わりに undefined が使用されます。 callbackfn は、要素の値、要素のインデックス、走査中のオブジェクトの3つの引数を伴って呼ばれます。 forEach(メソッド) は、 callbackfn を呼ぶことによって、呼ばれつつもオブジェクトが変異する可能性がある場合、当該オブジェクトを直接変異させることはありません。 forEach(メソッド)によって処理した要素の範囲は、 callbackfn を最初に呼ぶ前に設定されます。 forEach(メソッド)の開始をコールした後、配列に追加される要素には、もう callbackfn が訪れることはありません。 存在する配列の要素が、変更される場合、 コールバック(他の関数を呼び出し、実行する際に実行されるように引数として渡されるサブルーチン) を解析したものとしたそれらの値は、 forEach(メソッド)がそれらを訪れる時点での値となるでしょう。 forEach(メソッド)の開始呼び出しの後や訪問される前に削除される要素は、もう訪問されることはありません。 forEachメソッドが1つまたは2つの引数を伴って呼ばれる際には、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenValue は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenValue) とする 4. IsCallable(callbackfn) が、 falseである場合、TypeError例外を投げる(スローする) 5. thisArg が提供された場合、 T は、 thisArg とし、それ以外の場合、 T は、undefinedとする 6. k は、 0 とする 7. while k < len という条件下で繰り返す a. Pk は、 ToString(k) とする b. kPresent は、引数 Pk を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする c. kPresent が、 trueである場合、 i. kValue は、引数 Pk を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii.this 値としての T と kValue、k、O を含む引数リストを伴う callbackfn の内部メソッド[[Call]]を呼ぶ d. kを1で増分する 8. undefined を返す
forEachメソッドの length プロパティは、1です。 [注釈] forEach関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 forEach関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
callbackfn は、3つの引数を許容する関数とすべきです。 map(メソッド) は、昇順で配列内にある要素ごとに1度 callbackfn を呼び、結果から新たな Array を構成します。 callbackfn は、実際に存在する配列の要素についてのみ呼ばれ、欠落した配列の要素については呼ばれません。 thisArg パラメータが提供される場合、それは、 callbackfn として呼び出されるごとに this 値として使用されるでしょう。 それが提供されない場合には、代わりに undefined が使用されます。 callbackfn は、要素の値、要素のインデックス、走査中のオブジェクトの3つの引数を伴って呼ばれます。 map(メソッド) は、 callbackfn を呼ぶことによって、呼ばれつつもオブジェクトが変異する可能性がある場合、当該オブジェクトを直接変異させることはありません。 map(メソッド)によって処理した要素の範囲は、 callbackfn を最初に呼ぶ前に設定されます。 map(メソッド)の開始をコールした後、配列に追加される要素には、もう callbackfn が訪れることはありません。 存在する配列の要素が、変更される場合、 callbackfn を解析したものとしたそれらの値は、 map(メソッド)がそれらを訪れる時点での値となるでしょう。 map の開始呼び出しの後や訪問される前に削除される要素は、もう訪問されることはありません。 mapメソッドが1つまたは2つの引数を伴って呼ばれる際には、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenValue は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenValue) とする 4. IsCallable(callbackfn) が、 falseである場合、TypeError例外を投げる(スローする) 5. thisArg が提供された場合、 T は、 thisArg とし、それ以外の場合、 T は、undefinedとする 6. A は、Array が、その名と len の値である lenを持つ標準組み込みコンストラクタである場合、式 new Array(len) によるかのように生成した新たな配列とする 7. k は、0とする 8. while k < len という条件下で繰り返す a. Pk は、 ToString(k) とする b. kPresent は、引数 Pk を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする c. kPresent が、 trueである場合、 i. kValue は、引数 Pk を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii. mappedValue は、this 値としての T と kValue、k、O を含む引数リストを伴う callbackfn の内部メソッド[[Call]]を呼んだ結果とする iii.引数 Pk 、プロパティ記述子 {[[Value]]: mappedValue, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}、 false を伴う A の内部メソッド[[DefineOwnProperty]]を呼ぶ d. kを1で増分する 9. A を返す
mapメソッドの length プロパティは、1です。 [注釈] map関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 map関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
callbackfn は、3つの引数を許容する関数とすべきであり、Boolean値 true、または、false に強制変換する値を返します。 filter(メソッド) は、昇順で、配列内にある要素ごとに1度 callbackfn を呼び、 callbackfn が、 trueを返す場合の全ての値を含む新たな配列を構築します。 callbackfn は、実際に存在する配列の要素についてのみ呼ばれ、欠落した配列の要素については呼ばれません。 thisArg パラメータが提供される場合、それは、 callbackfn として呼び出されるごとに this 値として使用されるでしょう。 それが提供されない場合には、代わりに undefined が使用されます。 callbackfn は、要素の値、要素のインデックス、走査中のオブジェクトの3つの引数を伴って呼ばれます。 filter(メソッド) は、 callbackfn を呼ぶことによって、呼ばれつつもオブジェクトが変異する可能性がある場合、当該オブジェクトを直接変異させることはありません。 filter(メソッド)によって処理した要素の範囲は、 callbackfn を最初に呼ぶ前に設定されます。 filter(メソッド)の開始呼び出しの後、配列に追加される要素には、もう callbackfn が訪れることはありません。 配列の既存の要素が、 callbackfn に渡したのと同じ値に変更される場合、 filter(メソッド)がそれらを訪れる時点での値となるでしょう。 filter(メソッド)の開始呼び出しの後や訪問される前に削除される要素は、もう訪問されることはありません。 filterメソッドが1つまたは2つの引数を伴って呼ばれる際には、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenValue は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenValue) とする 4. IsCallable(callbackfn) が、 falseである場合、TypeError例外を投げる(スローする) 5. thisArg が提供された場合、 T は、 thisArg とし、それ以外の場合、 T は、undefinedとする 6. A は、その名を持つ標準組み込みコンストラクタである Array を式 new Array() によるかのように生成した新たな配列とする 7. k は、0とする 8. to は、0とする 8. while k < len という条件下で繰り返す a. Pk は、 ToString(k) とする b. kPresent は、引数 Pk を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする c. kPresent が、 trueである場合、 i. kValue は、引数 Pk を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii. selected は、this 値としての T と kValue、k、O を含む引数リストを伴う callbackfn の内部メソッド[[Call]]を呼んだ結果とする iii. ToBoolean(selected) が、 trueである場合、 1.引数 ToString(to) 、プロパティ記述子 {[[Value]]: kValue, [[Writable]]: true, [[Enumerable]]: true, [[Configurable]]: true}、falseを伴う A の内部メソッド[[DefineOwnProperty]]を呼ぶ 2. to を1で増分する d. kを1で増分する 10. A を返す
filterメソッドの length プロパティは、1です。 [注釈] filter関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 filter関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
callbackfn は、4つの引数を取る関数とするべきです。 reduce(メソッド)は、昇順で配列内にある要素ごとに1度、関数としてcallbackを呼びます。 callbackfn は、previousValue (または、callbackfnを呼ぶ前からある値)、 currentValue (現在の要素の値)、currentIndex 、走査中のオブジェクトの4つの引数を伴って呼ばれます。 callback が、最初に呼ばれる際には、 previousValue と currentValue は、2つの内1つの値とすることができます。 reduce(メソッド)を呼ぶ際に initialValue が提供された場合、 previousValue は、 initialValue と等しくなり、currentValue は、当該配列内の最初の値と等しくなります。 提供されたinitialValue が何もない場合、 previousValue は、当該配列内の最初の値と等しくなり、 currentValue は、2つめと等しくなります。 配列が何も含まない場合、且つ、 initialValue が提供されない場合、それは、TypeErrorです。 reduce(メソッド)は、callbackfnを呼ぶことによって呼ばれつつもオブジェクトが変異する可能性がある場合、当該オブジェクトを直接変異させることはありません。 reduce(メソッド)によって処理した要素の範囲は、最初に callbackfnを呼ぶ前に設定されます。 reduce(メソッド)の開始をコールした後に配列に追加される要素は、もう、callbackfnが訪れることはありません。 配列の既存の要素が変更される場合、 callbackfn に渡したのと同じそれらの値は、 reduce(メソッド)がそれらを訪れる時点での値となるでしょう。 reduce(メソッド)の開始呼び出しの後や訪れる前に削除される要素には、もう、訪れることはありません。 reduce(メソッド)が、1つまたは、2つの引数を伴って呼ばれる際には、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenValue は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenValue) とする 4. IsCallable(callbackfn) が、 falseである場合、TypeError例外を投げる(スローする) 5. len が、 0 且つ、 initialValue が存在しない場合、TypeError例外を投げる(スローする) 6. k は、0とする 7. initialValue が存在する場合、 a. accumulator に initialValue を設定する 8. それ以外の場合、 initialValue は、存在せず、 a. kPresent は、 false とする b. kPresent が、 false且つ、 k < len である場合、繰り返す i. Pk は、 ToString(k) とする ii. kPresent は、引数 Pk を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする iii. kPresent が、 trueである場合、 1. accumulator は、引数 Pk を伴う O の内部メソッド[[Get]]を呼んだ結果とする iv. k を1で増分する c. kPresent が、 falseである場合、TypeError例外を投げる(スローする) 9. while k < len という条件下で繰り返す a. Pk は、 ToString(k) とする b. kPresent は、引数 Pk を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする c. kPresent が、 trueである場合、 i. kValue は、引数 Pk を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii. accumulator は、this 値として undefined と accumulator、 kValue、k、O を含む引数リストを伴う callbackfn の内部メソッド[[Call]]を呼んだ結果とする d. k を1で増分する 10. accumulator を返す
reduceメソッドの length プロパティは、1です。 [注釈] reduce関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 reduce関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。
callbackfn は、4つの引数を取る関数とするべきです。 reduceRight(メソッド)は、降順で配列内にある要素ごとに1度、関数としてcallbackを呼びます。 callbackfn は、previousValue (または、callbackfnを呼ぶ前からある値)、 currentValue (現在の要素の値)、currentIndex (現在の要素のインデックス)、走査中のオブジェクトの4つの引数を伴って呼ばれます。 その関数(callback)が、最初に呼ばれる際には、 previousValue と currentValue は、2つの内1つの値とすることができます。 reduceRight(メソッド)を呼ぶ際に initialValue が提供された場合、 previousValue は、 initialValue と等しくなり、currentValue は、当該配列内の最後の値と等しくなります。 提供されたinitialValue が何もない場合、 previousValue は、当該配列内の最後の値と等しくなり、 currentValue は、最後から2つめの値と等しくなります。 配列が何も含まない場合、且つ、 initialValue が提供されない場合、それは、TypeErrorです。 reduceRight(メソッド)は、callbackfnを呼ぶことによって、呼ばれつつもオブジェクトが変異する可能性がある場合、当該オブジェクトを直接変異させることはありません。 reduceRight(メソッド)によって処理した要素の範囲は、最初に callbackfnを呼ぶ前に設定されます。 reduceRight(メソッド)の開始をコールした後に配列に追加される要素は、もう、callbackfnが訪れることはありません。 配列の既存の要素が変更される場合、 callbackfn に渡したもの同じそれらの値は、 reduceRight(メソッド)がそれらを訪れる時点での値となるでしょう。 reduceRight(メソッド)の開始呼び出しの後や訪れる前に削除される要素には、もう、訪れることはありません。 reduce(メソッド)が、1つまたは、2つの引数を伴って呼ばれる際には、次のステップが取られます。
1. O は、引数として this 値を渡して ToObject を呼んだ結果とする 2. lenValue は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 3. len は、 ToUint32(lenValue) とする 4. IsCallable(callbackfn) が、 falseである場合、TypeError例外を投げる(スローする) 5. len が、 0 且つ、 initialValue が存在しない場合、TypeError例外を投げる(スローする) 6. k は、len-1とする 7. initialValue が存在する場合、 a. accumulator に initialValue を設定する 8. それ以外の場合、 initialValue は、存在せず、 a. kPresent は、 false とする b. kPresent が、 false且つ、 k ≧ 0 である場合、繰り返す i. Pk は、 ToString(k) とする ii. kPresent は、引数 Pk を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする iii. kPresent が、 trueである場合、 1. accumulator は、引数 Pk を伴う O の内部メソッド[[Get]]を呼んだ結果とする iv. k を1で減分する c. kPresent が、 falseである場合、TypeError例外を投げる(スローする) 9. while k ≧ 0 という条件下で繰り返す a. Pk は、 ToString(k) とする b. kPresent は、引数 Pk を伴う O の内部メソッド[[HasProperty]]を呼んだ結果とする c. kPresent が、 trueである場合、 i. kValue は、引数 Pk を伴う O の内部メソッド[[Get]]を呼んだ結果とする ii. accumulator は、this 値として undefined と accumulator、 kValue、k、O を含む引数リストを伴う callbackfn の内部メソッド[[Call]]を呼んだ結果とする d. k を1で減分する 10. accumulator を返す
reduceRightメソッドの length プロパティは、1です。 [注釈] reduceRight関数は、汎用的であることが意図され、その this 値がArrayオブジェクトとなることを要求しません。 その為、メソッドとしての使用においてオブジェクトの他の種類に転送することが可能です。 reduceRight関数が、ホストオブジェクトにうまく適用されることが可能か否かについては、実装依存です。