14

JavaScriptのインデックスは32ビットであるため、配列インデックスは4294967295まで、合計4294967296要素まで拡張できるはずです。しかし、実際には、最高のインデックスは4294967294です。配列にはlengthプロパティがあるため、最後の要素としてnullを使用する理由はわかりません。最大インデックスが4294967294であるが、4294967295ではない理由はありますか?

4

3 に答える 3

14

これは、Arrayコンストラクターを使用して配列を作成するときにlength、次のようにオプションを指定できるためです。

new Array(length);

配列のlengthは、32ビットの符号なし整数です。したがって、配列の長さは、から0までの範囲である可能性がMath.pow(2, 32) - 1あり4294967295ます。

長さの配列の場合n、インデックスの範囲は0からn - 1です。したがって、JavaScript配列の最大インデックスは(Math.pow(2, 32) - 1) - 1またはです。Math.pow(2, 32) - 2これは4294967294です。

したがって、JavaScript配列は、4294967295要素ではなく最大の要素を保持でき4294967296ます。

知っている。それはかなり非論理的ですが、1つの要素が大きな違いを生むことはありません。

于 2012-10-07T05:57:51.370 に答える
5

ECMA-262仕様(セクション15.4)は次のように述べています。

プロパティ名P(文字列値の形式)は、ToString(ToUint32(P))がPに等しく、ToUint32(P)が2 32 -1に等しくない場合にのみ、配列インデックスになります。

仕様にlengthは、配列のプロパティは常に232未満あるとも記載されています。これは、配列インデックスとして4294967295を除外しているように見えます。

于 2012-10-07T06:11:33.653 に答える
0

javascript配列はを保持できます2^32-1=4294967295
しかし、配列インデックスはそれから始まります04294967295-1=4294967294

于 2012-10-07T05:48:31.417 に答える