訳の正確性を保証するものではありませんので必要に応じて原文であるEcma InternationalのECMA-262にある ECMA-262.pdf ( ECMA-262 5.1 Edition )を参照下さい。
訳:2012年04月 webzoit.net
Arrayオブジェクトは、特定のプロパティ名のクラスに特別な待遇を与えます。 (String値の書式において)プロパティ名 P は、 ToString(ToUint32(P)) が、Pと等しく、 ToUint32(P) が、2の32乗-1と等しくない場合に限り、配列インデックスです。 property名を持つプロパティは、要素を呼ぶこともある配列インデックスでもあります。 全てのArrayオブジェクトは、値が常に2の32乗より小さい非負の整数である length プロパティを持ちます。 length プロパティの値は、配列インデックスを持つプロパティごとの名称よりも数値的に大きくなります。 Arrayオブジェクトのプロパティは、常に生成または変更され、他のプロパティは、この不変性を維持する必要がある場合に調整されます。 特に名前付きで追加されるプロパティは、常に配列インデックスであり、必要があれば、その配列インデックスの数値以上にする為に length プロパティが変更されます。 また、length プロパティは、自動的に削除される新たな長さよりも小さくならない値を持つ配列インデックスである名称を持つプロパティごとに常に 変更されます。 この制約は、Arrayオブジェクトの自身のプロパティにだけ適用されるものであり、その prototype から継承される場合がある length や配列インデックスによって影響を受けることはありません。 次のアルゴリズムがtrueを返す場合、オブジェクト O は、希薄(sparse)になると言われます。
1. len は、引数"length"を伴う O の内部メソッド[[Get]]を呼んだ結果とする 2. 0≦i<ToUint32(len) の範囲内にある整数 i ごとに a. elem は、引数 ToString(i) を伴う O の内部メソッド[[GetOwnProperty]]を呼んだ結果とする b. elem が、undefinedである場合、trueを返す 3.falseを返す