"for in" 循环如何在 Javascript 中工作?

How does "for in" loop work in Javascript?

程序如下,

function sum(x) {
  console.log(typeof x[0]); //return Number
  var s=0;
  for(var e in x) {
    console.log(typeof e); //This return string
    s+=e;
  }
  return s;
}
console.log(sum([1,2,3,4,5])); //return 001234

如果我使用数字构造函数,那么它工作正常。

function sum(x) {
      console.log(typeof x[0]); // return Number
      var s=0;
      for(var e in x) {
        s+=Number(e);
      }
      return s;
    }
    console.log(sum([1,2,3])); //return 6

for in 循环发生了什么?

来自MDN

The for...in statement iterates over the enumerable properties of an object, in original insertion order.

A different property name is assigned to variable on each iteration.

属性 名称是字符串。所以你得到了字符串。 + 运算符将连接字符串。

如果将值转换为数字,则不再有字符串。 + 运算符将对数字执行加法运算。


console.log(sum([1,2,3]); //return 6

没有

它会抛出一个错误,因为你 ) 太少了。如果你解决了这个问题,它会输出 3 因为你在循环遍历 属性 名称 而不是值,所以你要添加 0, 12

其他人已经指出 for-in 遍历属性,而不是值。在数组的情况下,属性是索引。

function sum(x) {
  var s=0;
  for(var e in x) {
    s+=e;
  }
  return s;
};
var array = [1,2,3,4,5];
array.b="z";
console.log(sum(array)); // prints 001234b

在生成的 001234b 字符串中,您有: 前导“0”:s的初始值 然后是“0”,因为第一个索引是 0 然后是“1”,等等

for ... in es6中的循环用于遍历对象。

从技术上讲,数组是一个对象,它在数组的索引上循环。您可以在 for 循环中通过 console.logging 看到这一点。

使用 For ... of loop 来正常循环数组。

function sum(x) {
  console.log(typeof x[0]); //return Number
  var s=0;
  for(var e of x) {  // of loop
    console.log(e)
    s+=e;
  }
  return s;
}
console.log(sum([1,2,3,4,5])); //return 001234