循环 - forEach、for、for....of、for...in

Abh*_*ava 1 javascript syntax loops typescript

我无法理解所有这些循环之间的区别,任何人都可以分享一个链接或一些文章,以帮助我在效率、速度、可用性等方面更详细地了解这些循环。

在下面的代码中,我如何才能最好地理解这些差异?

const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

for (let i = 0; i < digits.length; i++) {
  console.log(digits[i]);
}

const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];

for (const index in digits) {
  console.log(digits[index]);
}

const digits = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
for (const index of digits) {
  console.log(digits[index]);
}
Run Code Online (Sandbox Code Playgroud)

Vig*_*aja 6

for 循环:这是迭代数组的常用方法,我们使用iasindex来访问数组中的元素lettersMDN 文档供参考

var letters = ["a","b","c"];
for (let i = 0; i < letters.length; i++)
{
    console.log("Index : "+i, "Value : "+letters[i]);
}
Run Code Online (Sandbox Code Playgroud)

for...in loop :这个循环总是遍历索引。在遍历数组时,变量i将保存index每个元素的值。这可以index在迭代期间需要元素的时候使用。MDN 文档供参考

var letters = ["a","b","c"];
for (var i in letters)
{
    console.log("Index : "+i, "Value : "+letters[i]);
}
Run Code Online (Sandbox Code Playgroud)

for...of 循环:这个循环总是遍历数组的值。在遍历数组时,变量i将保存元素的值。如果仅value需要数组中的元素,则可以使用此方法。MDN 文档供参考

var letters = ["a","b","c"];
for (var i of letters)
{
    console.log(i);
}
Run Code Online (Sandbox Code Playgroud)

forEach 循环:此循环在遍历 arr 时对每个元素执行回调函数。回调的参数是currentValueindex到currentValue,的array在其上执行的循环。MDN 文档供参考

var letters = ["a","b","c"];
letters.forEach(function(value, index, arr){
    console.log("Value : "+value, "Index : "+index, "Complete array : "+arr)
});
Run Code Online (Sandbox Code Playgroud)

您的情况的问题:代码按照流程正常工作。由于您的数组元素等于其索引,因此您很难理解它。

in for...in 循环:index=0给出digits[0]=0index=1给出digits[1]=1等等。

在 for...of 循环中:(index=0其中变量index保存 的值digits[0]),在console语句中编译器解释index 0array d. 因此它返回值 at digits[0],等等所有元素。