我有一个问题,理解为什么在进行简单的FizzBuzz测试时迭代数组时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循环的行为方式相同吗?
答案 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/