循环使用具有不同结果的JavaScript数组元素的两种方法

时间:2012-12-16 11:22:49

标签: javascript for-loop foreach

我有一个关于在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
            };
        }
    }

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

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

有什么不同,为什么foreach-loop不像我想要的那样工作?

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分: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

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