2

さて、投稿する前に少し検索しました...運が悪い(または、私が愚かなだけかもしれません)。

「myArray」と呼ぶこの配列があり、オブジェクトをその配列にプッシュして、いくつかの変数を設定します。

myArray.push({
    time        : (y.moveTime - y.startTime),
    pos         : y.move,
    last        : myArray[y.recents.length-1].time
});

私の問題は、firebug が「最後の」変数について不平を言う理由です:「Uncaught TypeError: Cannot read property 'time' of undefined」. 私が行った場合

last        : myArray[y.recents.length-1]

すべて順調。

理解できない観察:「.time」参照がある場合、配列は空ですが、それを削除すると、配列はいっぱいになります。

ここで何が欠けていますか?理解できません :(

ご指摘ありがとうございます。

4

2 に答える 2

4

エラーは、の評価値が

myArray[y.recents.length-1]

timeプロパティを持つオブジェクトではありません。pushこれは、配列にまだ要素がないため、最初の実行時に発生する可能性があります。

この場合、エラーを非表示にしてlastプロパティを割り当てるだけのundefined場合は、フォールバック値を追加するだけです。

last: (myArray[y.recents.length - 1] || {}).time 
于 2012-04-04T00:02:14.993 に答える
0

の値はmyArray[y.recents.length-1]何でもかまいません (文字列、オブジェクト、配列、null など)。の値を設定できlast、エラーは発生しません。

ただし、プロパティをオブジェクト以外に設定すると (設定のようにtime)、エラーが発生します。

于 2012-04-04T00:02:18.320 に答える