【问题标题】:JavaScript TypeError with arrays and integers带有数组和整数的 JavaScript TypeError
【发布时间】:2012-10-05 03:40:50
【问题描述】:

所以,我在 JavaScript 中遇到了数组的问题。 我初始化了一些变量,如下所示:

var world = new Array;
var monsters = new Array;
var items = new Array;
var x = 0;
var y = 0;

并尝试在其上运行此代码:

            while (y <= 49) { //generate world
                world[x][y] = parseInt(Math.floor(Math.random()*2)); //0 = flatland, 1 = desert, 2 = mountain, 3 = swamp
                x++;
                if (x >= 49) {
                    x = 0;
                    y++;
                }
            }
            x = 0;
            y = 0;

但我收到此错误: “TypeError:无法将未定义的对象转换为对象”Math.random() 行。 我已经尝试了我能想到的一切,但它仍然会引发该错误。 任何帮助将不胜感激!

【问题讨论】:

  • @spng453 人们普遍认为使用文字数组表示法[] 比使用new Array() 更好,正是因为它很容易出错。
  • @Shmiddty: new Arraynew Array() 都很好。
  • world[x] 是未定义的,不是array,所以world[x][y] 很可能undefined[y] 会失败。
  • 好的,现在说得通了。我确实有 new Array(),但我在某处读到,说 new Array 可能会有所帮助。

标签: javascript arrays object random undefined


【解决方案1】:

world[x][y] 未初始化。那就是问题所在。你需要在while语句下面初始化

while (y <= 49) {
    world[x] = new Array(); //add this

【讨论】:

  • 谢谢你,这正是我想要的。
【解决方案2】:

world[x] 不是数组,因此在尝试为world[x][y] 赋值时会出错,您填充数组的方法对我来说似乎很奇怪,我会这样做

world = [];
for (x = 0; x <= 49; x++) { //generate world
    world[x] = [];
    for (y = 0; y <= 49; y++){
        world[x][y] = parseInt(Math.floor(Math.random()*2)); //0 = flatland, 1 = desert, 2 = mountain, 3 = swamp
    }
}
x = 0;
y = 0;

【讨论】:

  • 嗯,我理解你对 for 语句的意思,但对我来说,嵌套的 while 语句更容易阅读。
【解决方案3】:

您缺少()。 World 必须定义为二维数组world[x] = new Array(); 使用[] 表示法更方便。

【讨论】:

    猜你喜欢
    • 2013-03-15
    • 2011-12-15
    • 1970-01-01
    • 2021-06-06
    • 2020-07-25
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-13
    相关资源
    最近更新 更多