对于循环ES6不再工作

时间:2015-12-06 22:03:42

标签: javascript node.js ecmascript-6

我向上帝发誓这是有效的,我知道这是因为我的考试已经过了一段时间......现在却没有。请参见下面的错误屏幕。

describe('', () => {

    let newBoard;

    beforeEach(() => {
        newBoard = new board();
    });

    it('', () => {
        for(let row in newBoard){
            for(let column in row){
                newBoard[row][column].should.equal("");
            }
        }
    });
});

board.js

module.exports = function(){
    return  [["", "", ""],
             ["", "", ""],
             ["", "", ""]];
};

enter image description here

3 个答案:

答案 0 :(得分:0)

首先是一些家务用品。你有一个for-in循环,而不是for循环。 for-in循环是人们学习JavaScript的常见错误来源,因为它看起来像你想要的那样,但它不是为了迭代数组。它的意思是迭代对象的属性。

您正在寻找的新ES6循环称为for-of loop。它的工作是遍历数组中的项目。在您的示例中,尝试更改代码以使用for-of循环。

it('', () => {
    for(let row of newBoard){
        for(let column of row){
            column.should.equal("");
        }
    }
});

答案 1 :(得分:0)

虽然@RobW的评论应该是问题:for (let column in newBoard[row]).

我想添加一个建议:由于您使用的是ES6,因此您可能希望使用for of循环:

it('', () => {
    for(let row of newBoard){
        for(let cell of row){
            cell.should.equal("");
        }
    }
});

答案 2 :(得分:-1)

在你的内循环中,你要求它为每个项目创建一个变量column作为一个数字的对象。 for in构造为您提供newBoard数组中每个项目的索引。

内部循环需要在为newBoard指定的索引处访问数组,以便您的代码变为for(let column in newBoard[row])