这是代码:

var InvertedPeninsula = function() {
  this.inhabitants = [
    {
      name: 'Sir Charles',
      race: 'Human'
    },
    {
      name: 'Ealei',
      race: 'Elf'
    }
  ];
  // Adds an extra humans method property to the inhabitants array to return all Humans
  this.inhabitants.humans = function() { /* returns all Human inhabitants */ };
};

// Create a new invertedPeninsula
var invertedPeninsula = new InvertedPeninsula();

// Log the name of each invertedPeninsula inhabitant
for (var i in invertedPeninsula.inhabitants) {
  console.log(invertedPeninsula.inhabitants[i].name);
}

在我看来,它叫做2x。 3x来自哪里?阵列中只有2个单元格。

最佳答案

这正是他们使用for...in迭代数组时遇到的陷阱。for...in遍历所有可枚举的属性,因此humans也被迭代。

数组中当然有2个对象,但是肯定具有三个属性:01humans,因此是3次。

invertedPeninsula.inhabitants.forEach(function(habitat){
   console.log(habitat.name);
});
Array.forEach是您最好的选择,因为它会遍历编号的属性。正常的for循环也可以。

10-06 12:20