1

しましょうarr = [1,2,3,4]arr[x]どこに設定するとx >= arr.length、 にarr.lengthなりx + 1ます。

これは Firefox と Chrome で発生します。2 つの質問があります。

  1. これは定義された動作ですか? (ソースは大歓迎です)
  2. これは推奨されていますか?

ありがとう!

4

3 に答える 3

5

これは定義された動作ですか?

はい、仕様の §15.4 を参照してください。

これは推奨されていますか?

それは、あなたが望む最終結果に完全に依存します。やっても問題ありません。

次のように構築された配列をよく見かけます。

var a = [];
for (/*...some loop over things...*/) {
    a[a.length] = /* ...something to put on the array... */;
}

...これは次とまったく同じです:

var a = [];
for (/*...some loop over things...*/) {
    a.push(/* ...something to put on the array... */);
}

一部の JavaScript エンジンはa[a.length] = ...よりも高速に処理しますa.push(...)(その他はその逆です)。

JavaScript 配列はsparseであることに注意してください。配列にはギャップが存在する可能性があり、これがこの動作の理由の一部です。(実際、JavaScript 配列は実際にはまったく配列ではありません。) プロパティに assign を割り当てることができlengthます。

于 2012-12-22T08:21:21.883 に答える
1

配列インデックスはゼロから始まります。

arr[0] == 1
arr[1] == 2
arr[2] == 3
arr[3] == 4

を設定arr[4]すると、5番目の要素になります。

于 2012-12-22T08:18:31.933 に答える
0

確かに、これは JavaScript で行うことができます。

  • 配列は x 番目のインデックスまで拡張され、そこに値が配置されます。
  • 配列の長さは x+1 になります。
  • その間のインデックスの値は、定義されたことはありません.4からx-1の場合はundefined.
于 2012-12-22T08:18:51.493 に答える