是否存在Array.isArray()不起作用的情况?

时间:2015-12-18 14:37:51

标签: javascript arrays multidimensional-array

所以我一直在尝试调试我正在编写的物理引擎,而对于需要分配2D数组阵列的多维空间散列图。

为什么这段代码会给我"无法读取属性'推送'未定义"?我的if语句和我试图推送到数组之间的界限是否发生了什么?

编辑"此"是指一个PhysicsEngine实例,它保留对"实体的引用"数组以及" hashmap"阵列。

function PhysicsEngine(game) {
    this.game = game;
    this.entities = [];
    this.hashmap = createArray(32, 32);
}

for(var i = 0; i < this.entities.length; i++) {
    //Array item may not be a Simulateable Entity
    //this.entities[i].simulatePhysics(this);
    this.entities[i].ResolveCollisions();
    this.entities[i].Move();
    hmx = Math.round(Math.abs(this.entities[i].x/32));
    hmy = Math.round(Math.abs(this.entities[i].y/32));

    if(!logged) {
      console.log(this.hashmap);
      console.log(this.entities[i]);
      console.log(i, hmx, hmy);
      console.log(this.hashmap[hmx], this.hashmap[hmy]);
      logged = true;
    }

    if(!Array.isArray(this.hashmap[hmx])) {
      this.hashmap[hmx] = [];
      if(!Array.isArray(this.hashmap[hmx][hmy])) {
        this.hashmap[hmx][hmy] = [];
      }
    }

    this.hashmap[hmx][hmy].push(this.entities[i]);
}

1 个答案:

答案 0 :(得分:2)

我认为这段代码:

this.hashmap[hmx] = [];
      if(!Array.isArray(this.hashmap[hmx][hmy])) {
        this.hashmap[hmx][hmy] = [];
      }

不正确。特别是&#34; if&#34; condition测试this.hashmap [hmx] [hmy]是否为数组。问题是this.hashmap [hmx] = [](因为你之前设置了一行),所以this.hashmap [hmx] [hmy]是未定义的,javascript会抛出错误&#34; Undefined不是对象&# 34。

这可能是问题吗?