Javascript数组变量未定义,在for循环中使用 "i"来访问,但使用绝对值时可用

标签 javascript variables for-loop undefined

我用 Javascript 创建了一个数组,旨在保存有关一组升级的基本详细信息,作为我正在制作的游戏的一部分。升级定义如下;

var Upgrade = {Name:NameIn,
               Description:DescriptionIn,
               Image:ImageIn,
               Purchased:0,
               Visible:false,
               ID:IDIn}

我有一个标准的 for 循环正在尝试访问这些变量。然而,由于某种原因,当我尝试使用我在循环中创建的 i 变量来访问描述变量时,它会出现“未定义”错误。即 Upgrades[i].Description 显示为未定义。

我已经检查过,所有其他元素(例如名称、图像等)都可以使用“i”变量访问。例如升级[i].Name

但是,如果我在尝试访问描述时手动输入 i 等于代码的一部分(例如,使用 Upgrades[1]Upgrades[i ])它允许访问它。

数组已这样填充;

function AddUpgrade(NameIn,DescriptionIn,ImageIn,IDIn){
var Upgrade = {Name:NameIn,
               Description:DescriptionIn,
               Image:ImageIn,
               Purchased:0,
               Visible:false,
               ID:IDIn}
Upgrades.push(Upgrade);

AddUpgrade("Sharpened Rocks","Description",
        "img/upgrades/Caveman2.png","Caveman2Display");

下面是尝试访问变量以发送到 HTML 文档的循环;

for (i = 1; i < Upgrades.length ; i++){
    if (Upgrades[i].Visible == 1){
        document.getElementById("upgrades").innerHTML += "<div class=\"upgrade\" id=\"" + Upgrades[i].ID + 
        "\" onclick=\"ButtonBuyUpgrade(" + i + ")\"><img src=\"" + Upgrades[i].Image + "\"><div class=\"hovertext\" id=\"" 
        + Upgrades[i].ID + "Hover\">" + DisplayUpgradeCost(i) + Upgrades[i].Description + "</div></div>";
    }
}

这是控制台的输出;

Uncaught TypeError: Cannot read property 'Description' of undefined inc.js:161 DisplayUpgrade inc.js:161 CalculateUnlocks inc.js:463 (anonymous function) inc.js:502 Object {Name: "Sharpened Rocks", Description: "Description", Image: "img/upgrades/Caveman2.png", Purchased: 0, Visible: 1…} Description: "Description" ID: "Caveman2Display" Image: "img/upgrades/Caveman2.png" Name: "Sharpened Rocks" Purchased: 0 Visible: 1

这是 console.dir 输出;

1:对象 描述:“描述” ID:“穴居人2显示” 图片:“img/upgrades/Caveman2.png” 名称:《削尖的岩石》 已购买:0 可见:1

所有其他元素也已填写,没有遗漏的信息。

我对此感到完全困惑,不知道为什么会发生这种情况。有什么想法吗?

最佳答案

看起来您已经创建了一个对象。对象是键:值对的集合。数组是按索引(从 0 开始)排序的元素的集合,用 [] 表示。要循环访问您的对象,请尝试 forIn 循环:

var Upgrade = {
  Name:'NameIn',
  Description:'DescriptionIn',
  Image:'ImageIn',
  Purchased:0,
  Visible:'false',
  ID:'IDIn'
}

for(var i in Upgrade) {
  console.log(Upgrade[i])
} 

关于Javascript数组变量未定义,在for循环中使用 "i"来访问,但使用绝对值时可用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25404063/

相关文章:

javascript - Prototype.js - Form.element.observer + Internet Explorer + 选择框

perl - 使用eval初始化Perl变量

Bash——文件名中的 Rsync 变量有空格

javascript - 将 var 从 JS 传递到 PHP

javascript - 仅使用 for 循环来迭代对象数组与其他数组

c++ - 检查 map 条目是否在基于的范围内的最后一个?

javascript - Sencha ExtJS 中的引用和存储问题

javascript - HTML 表单客户端验证

javascript - 我怎么能用另一种方式编写这个随机数生成按钮/div 语法?

javascript - 在异步代码的 for 循环完成后,如何解决这个 promise ?