JavaScript抛出了一个与拼接相关的异常-敌人[i]未定义
所以,我有这个函数,出于某种原因,它在某个点开始抛出一个“敌人[I]是未定义的”错误。该函数在游戏循环中不断被调用JavaScript抛出了一个与拼接相关的异常-敌人[i]未定义,javascript,Javascript,所以,我有这个函数,出于某种原因,它在某个点开始抛出一个“敌人[I]是未定义的”错误。该函数在游戏循环中不断被调用 function moveEnemies() { for(i = 0; i < enemies.length; i++) { enemies[i].y += FE_SPEED; enemies[i].c.attr("y", friends[i].y); if(enemies[i].y > 640) delete enemies[
function moveEnemies() {
for(i = 0; i < enemies.length; i++) {
enemies[i].y += FE_SPEED;
enemies[i].c.attr("y", friends[i].y);
if(enemies[i].y > 640)
delete enemies[i];
}
for(i = 0; i < enemies.length; i++) {
if(!enemies[i])
enemies.splice(i, 1);
}
}
函数(){
对于(i=0;i<0.length;i++){
敌人[i].y+=FE_速度;
敌人[i].c.attr(“y”,朋友[i].y);
if(敌人[i].y>640)
删除敌人[i];
}
对于(i=0;i<0.length;i++){
如果(!敌人[i])
3.拼接(i,1);
}
}
我做错了什么?您正在更改for循环中的数组
1.拼接(i,1)代码>正在更改敌人的长度
e、 g
敌人.length
是一个不断变化的值,因为您调用了删除敌人[i]
和敌人.splice(i,1)
。相反,您应该不断更改一个变量,该变量会更新列表的长度,并在循环计数器高于此变量时中断循环。@stackErr:No它不会从delete
调用中更改。当然,他根本不应该使用delete
,但那是另一回事了。@Bergi oops是的delete
不会改变它,但是splice
会改变它!我不确定这是不是一个完全相同的副本。副本没有提到删除,问题也不是同一个问题。答案可能相似,但问题似乎很独特。
var a = [1,2,3,4];
a.splice(1,2);
console.log( a.length ); // 2