# 概念
- 循环应该用在遍历非数组对象
- 从技术上将,可以使用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()
*/