###用for循环遍历对象
var person = {
name: 'tom',
age: 29,
sex: '男'
}
//首先有Object.keys()的方法拿到可迭代(遍历)的私有属性名的集合(数组)
var keys = Object.keys(person);
for (var i = 0; i < keys.length; i++) {
console.log(keys[i] + ":" + person[keys[i]]); // 输出: name:tom age: 29 sex: '男'
}
这么小众的方法为什么要知道呢?因为工作中如果用 for...in 遍历会出缺陷:
for in 典型的缺陷:
var arr = [1, 2, 3, 4];
正常情况:
for (var i in arr) {
console.log(i);
} //输出 0 1 2 3
忽然某一天你用 for...in 遍历一个数组,你会发现你的for...in全都怀了,怎么坏了呢?
由于某些人为Array添加了一个(判断元素是不是存在数组中)的新方法 inArray;
Array.prototype.inArray = function () {
for (var i = 0; i < this.length; i++) {
if (this[n] === ele) {
return true;
}
}
return false;
};
//然后我们在试试 for...in 好使吗
for (var i in arr) {
console.log(i);
}//输出 0 1 2 3 inArray
哇!!!怎么会多了一个inArray呢? inArray被遍历出来了呢?
注意底层识别属性时后扩展的属性不能被识别为有效的共有属性.