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”。然后我得到这个:
Uncaught TypeError: Cannot read property 'hp' of undefined at 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 无法读取现有对象的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45350178/