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/

10-09 17:39