[英]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.