0

我有一个关于 JavaScript 循环的问题。我主要使用 jQuery,但现在我决定用纯 JavaScript 制作一个简单的游戏。

如果我用这种方法遍历我所有的“td”,它就可以工作,这些cells[i]是 td 元素,我可以将事件附加到它们。

    for(i = 0; i < cells.length; i++){
        if(cells[i].nodeName == 'TD')
        {
            cells[i].onclick = function(){
                // call funciton on onclick
            };
        }
    }

但如果我这样做,每个元素都只是索引号,最后的两个是lengthand item

    for(var cell in cells){
        // cell is a number
    }

有什么区别,为什么 foreach 循环不像我想要的那样工作?

4

2 回答 2

2

cell是一个数字,因为它是cellsHTMLCollection 的索引。在第二个循环中,您将使用如下值:

for(var cell in cells){
    if(cells[cell].nodeName == 'TD')
    {
        cells[cell].onclick = function(){
            GameTurnExecute(player);
        };
    }
}
于 2012-12-16T11:24:43.050 回答
0

你也可以说:

for(var cell in cells){
    if(cells.hasOwnProperty(cell))
    {
        cells[cell].onclick = function(){
            GameTurnExecute(player);
        };
    }
}

看不到来自原型链的属性。(https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object/hasOwnProperty

事实上,几乎每次你for in在 javascript 中使用你都想使用 hasOwnProperty。

于 2012-12-16T12:13:34.650 回答