繁体   English   中英

未在for循环中使用“ i”定义Javascript数组变量,但在使用绝对值时可用

[英]Javascript array variable undefined using “i” in for loop to access, but available when using absolute value

我已经用Javascript创建了一个数组,该数组旨在保存有关一组升级的基本细节,这是我正在制作的游戏的一部分。 升级定义如下:

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

我有一个尝试访问这些变量的标准循环。 但是由于某种原因,当我尝试使用在循环中创建的i变量访问Description变量时,Description变量出现“未定义”错误。 Upgrades[i].Description 。说明显示为未定义。

我已经检查过,可以使用“ i”变量访问所有其他元素,例如Name,Image等。 例如Upgrades[i].Name

但是,如果我在尝试访问Description时(例如,将Upgrades[1]反对Upgrades[i] )手动输入等于代码的内容(例如,对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>";
    }
}

这是控制台的输出;

未捕获到的TypeError:无法读取未定义的inc.js的属性'Description':161 DisplayUpgrade inc.js:161 CalculateUnlocks inc.js:463(匿名函数)inc.js:502对象{名称:“碎石”,描述:“描述“,图像:” img / upgrades / Caveman2.png“,购买:0,可见:1…}说明:”描述“ ID:” Caveman2Display“图像:” img / upgrades / Caveman2.png“名称:”碎石“已购买:0可见:1

这是console.dir输出;

1:对象描述:“描述” ID:“ Caveman2Display”图像:“ img / upgrades / Caveman2.png”名称:“ Sharpened Rocks”购买: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])
} 

要关闭该程序,原来问题出在我的循环中i变量的范围来自调用该函数的另一个循环,因此程序感到困惑。 我通过循环说来解决了这个问题(var i = 0来创建一个称为i的局部变量来使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM