2

そのため、多次元配列の各レベルに 1 つずつ、2 つの「for」ループを介して配列を構築しようとしています。

変数:

var pos = new Array();
var scales = [
  2,   // Background
  0.9, // Slide_1 (farthest back)
  1,   // Slide 2
  1.15 // Slide 3
];

コードは次のとおりです。

for(j = 0; j < 5; j++) {
  var nextPosition = 0;
  for(var i = 0; i < numZones; i++) {
    alert(j + '' + i);
    pos[j][i] = nextPosition;
    nextPosition = (nextPosition + screenWidth + bufferSize) / scales[j];
  }
}

第 1 層まで問題なく繰り返されますが、第 2 層にロールオーバーすると、Firebug はpos[j][i] = nextPositionラインで漠然としたエラーをスローします。それは主張する

TypeError: can't convert undefined to object

言うまでもなく、私はかなりイライラして困惑しています。未定義とは正確には何ですか?私は何が欠けていますか?各パスでandalert()の値を調べていますが、 andで問題ありませんが、上記の行にヒットすると、エラーがスローされます。iji=0j=1

前もって感謝します。

4

1 に答える 1

4

問題は、決して定義しないことですpos[j]。したがって、 のpos[j][i]ようになりundefined[i]ます。これを試して:

for(j = 0; j < 5; j++) {
    var nextPosition = 0;
    pos[j] = [];                         <== new statement
    for(var i=0; i < numZones; i++) {
        alert(j + '' + i);
        pos[j][i] = nextPosition;
        nextPosition = (nextPosition + screenWidth + bufferSize) / scales[j];
    }
}

余談ですがpos、配列リテラルを使用して初期化することをお勧めします。

var pos = [];

ではなくnew Array()。それはよりスタイリッシュであると考えられています。:)

于 2013-03-10T06:36:23.890 に答える