没有添加到数组的值?

时间:2013-12-27 18:15:15

标签: javascript html

对我来说似乎不可能的简单问题,因为我只是盯着代码。

基本上我有这个函数,我把它称为X次,它应该把所有创建的div放在一个名为world的数组中,我已经在函数之外声明了。

但是,如果我尝试使用其中一个值,则它们是“未定义的”。

var world = [];


function newTile(x, y, size, rotX, rotY, rotZ, tranX, tranY, tranZ, color) {

    var tile = document.createElement('div');
    tile.className = "tile";
    tile.style.width = size+"px";
    tile.style.height = size+"px";
    tile.style.webkitTransform = 
        "rotateX("+rotX+"deg)"+
        "rotateY("+rotY+"deg)"+
        "rotateZ("+rotZ+"deg)"+
        "translateX("+tranX+"px)"+
        "translateY("+tranY+"px)"+
        "translateZ("+tranZ+"px)";
    tile.style.transform = 
        "rotateX("+rotX+"deg)"+
        "rotateY("+rotY+"deg)"+
        "rotateZ("+rotZ+"deg)"+
        "translateX("+tranX+"px)"+
        "translateY("+tranY+"px)"+
        "translateZ("+tranZ+"px)";
    if (x == 0 && y == 0) {
        color="rgba(255,255,0,0.5)";
        pathStart = tile;
        pathCur = tile;
    }
    tile.style.backgroundColor = color;

    tile.data = {
        x:x,
        y:y,
        blacklist:0
    }

    tile.onclick = function() {
        worldOri(null,null,null, -this.data.x*128 - 64, null, -this.data.y*128 - 64);
    };

    if (debug) tile.textContent = x+", "+y;

    document.getElementById('world').appendChild(tile);
    world[x] = [];
    world[x][y] = tile;
}

假设我做了类似的事情:

newTile(2,6,128,90,0,0,2*128,0,6*128, "rgba(255,125,0,0.5)");

这可以按预期工作,并且肯定会创建一个div,将其置于另一个具有id“world”的div中,并且应该在[2] [6]处将div添加到数组“world”中。如果我现在尝试用div做某事,例如改变颜色:

world[2][6].style.backgroundColor = "rgba(255,0,0,0.5)";

它返回为undefined,我假设实际添加到“world”数组不起作用,请帮忙。

1 个答案:

答案 0 :(得分:2)

每次拨打world[x] = [];时,

world[x]都会指定一个空数组newTile,从而“移除”world[x]中的所有现有切片。只有在它不存在时才初始化它:

world[x] = world[x] || [];