if (rightArmy.pikeman.length > 0) {
x = rightArmy.pikeman.length;
console.log(x + " X");
console.log(rightArmy.pikeman[0].hp);
/*291*/ while (rightArmy.pikeman[x-1].hp < 1 && x>0) {
rightArmy.pikeman.pop();
x--;
}
}
rightArmy.pikeman是一个数组,最后一个console.log显示rightArmy.pikeman [0]的值“ hp”为“ -80”。这意味着rightArmy.pikeman [0]必须存在。在此之前,我直接用console.log检查X的值,结果是“ 1”。然后我得到这个:
未捕获的TypeError:无法读取未定义的属性“ hp”
在HTMLButtonElement.fight(java.js:291)
为什么它不能阅读它,怎么可能呢?我在代码中为您标记了291行。
控制台显示:
java.js:289 1 X
13:53:54.830 java.js:290 -80
最佳答案
您可能会收到此错误,因为当x
到达0
时,首先您的while循环将检查rightArmy.pikeman[x-1].hp
,这与rightArmy.pikeman[-1].hp
时的x == 0
相同。
通常,数组在-1
的索引中未定义。
一个简单的解决方法是更改while循环中条件的顺序-while (rightArmy.pikeman[x-1].hp < 1 && x>0)
会变成while (x>0 && rightArmy.pikeman[x-1].hp < 1)
,
或将x初始化为rightArmy.pikeman.length - 1
。
关于javascript - Javascript无法读取现有对象的值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45350178/