对于在FizzBu​​zz测试中的ES6 vs for循环

时间:2017-08-04 15:46:11

标签: javascript ecmascript-6

我有一个问题,理解为什么在进行简单的FizzBu​​zz测试时迭代数组时ES6中的for in语句行为有所不同,请考虑以下示例

let numbers  = [0,1,2,3,4];

现在让我们使用for循环遍历数组

for (var i=1; i <= numbers.length; i++)
{
    if (i % 15 == 0)
        console.log("FizzBuzz");
    else if (i % 3 == 0)
        console.log("Fizz");
    else if (i % 5 == 0)
        console.log("Buzz");
    else
        console.log(i);
}

结果是

1
2
Fizz
4
Buzz

现在让我们在ES6中使用in语句

for (number in numbers)
{
    if (number % 15 == 0)
        console.log("FizzBuzz");
    else if (number % 3 == 0)
        console.log("Fizz");
    else if (number % 5 == 0)
        console.log("Buzz");
    else
        console.log(number);
}

结果是

FizzBuzz
1
2
Fizz
4

for in语句的行为与for循环的行为方式相同吗?

1 个答案:

答案 0 :(得分:4)

不同之处在于,在第一个示例中,您从1开始i并对i进行测试,但在第二个循环中,您将从0开始测试数组中的数字。

但是,这可能无法正常工作,具体取决于您的javascript引擎。根本不应该使用for-in循环迭代数组。选择此模式:

for (let number of numbers) {
  console.log(number);
}

这篇文章很好地解释了原因:https://www.eventbrite.com/engineering/learning-es6-for-of-loop/