JavaScript 无法读取现有对象的值?

标签 javascript debugging

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/

相关文章:

JavaScript getElementById(array).style.borderColor 不起作用

javascript - lodash - 将对象添加到另一个对象

javascript - 在 JS 中渲染 XML 的 nbsp 问题

javascript - 如何使用botkit在特定时间发送消息?

java - Grails 应用程序中的 SMTP 邮件失败(MS Exchange 且无身份验证)

Flutter:Debug Console:字母:I,W 是什么意思?

javascript - Nodeclipse,作为引用 javascript 文件中的链接资源?

c - 为什么 objdump 生成的程序集很大?

python:从程序运行交互式 python shell

ruby - 伟大的 Ruby 追踪 gem ?