我正在制作一个涉及小行星的游戏。我有一个看起来像这样的碰撞检测功能:
function collisions(){
for (j=asteroids.length-1;j>=0;j++){
//do stuff with asteroids[j]
}
}
我尝试用小行星进行碰撞数学运算,但是我收到了这个错误:
TypeError: Cannot read property 'x' of undefined
我的主要问题是我写的时候:
console.log(asteroids[j])
它记录了两个值,Asteroid对象和undefined。我想也许它是从其他地方记录未定义的,所以我写道:
console.log("1", asteroids[j], "2")
它返回了Asteroid对象和undefined,前面都是“1”,后面是“2”。小行星[j]是否同时具有两个值?这里发生了什么?我该如何解决?
提前致谢。
答案 0 :(得分:2)
你需要递减(i--
)循环而不是递增(i++
)。
for (j=asteroids.length-1;j>=0;j--){
//do stuff with asteroids[j]
}
答案 1 :(得分:1)
用asteroids.length-1
开始循环,这是最后一个元素ant,然后递增j++
索引。这会在第二次迭代中将您推送到数组之外。因此,你得到第二个undefined
。 Javascript不会抛出ArrayIndexOutOfBound
之类的错误。它有undefined
说明了一切。因此,您尝试访问超出数组范围的内容时会得到undefined
。