for-in

# 概念

  • 循环应该用在遍历非数组对象
  • 从技术上将,可以使用for-in循环数组(因为JavaScript中数组也是对象),但这是不推荐的。
  • 因为如果数组对象已被自定义的功能增强,就可能发生逻辑错误。另外,在for-in中,属性列表的顺序(序列)是不能保证的。所以最好数组使用正常的for循环,对象使用for-in循环。

# 举例

  • hasOwnProperty()
    • 当遍历对象属性的时候可以过滤掉从原型链上下来的属性。
// for-in 循环
for (var key in obj) {
   if (obj.hasOwnProperty(key)) { // 过滤
      console.log(key, ":", obj[key]);
   }
}
/* 控制台显示结果
hands : 2
legs : 2
heads : 1
*/
  • 反面例子
// for-in loop without checking hasOwnProperty()
for (var key in obj) {
   console.log(key, ":", obj[key]);
}
/*
控制台显示结果
hands : 2
legs : 2
heads : 1
clone: function()
*/