###用for循環(huán)遍歷對象
var person = {
????name: 'tom',
????age: 29,
????sex: '男'
}
//首先有Object.keys()的方法拿到可迭代(遍歷)的私有屬性名的集合(數(shù)組)
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 遍歷一個數(shù)組,你會發(fā)現(xiàn)你的for...in全都懷了,怎么壞了呢?
由于某些人為Array添加了一個(判斷元素是不是存在數(shù)組中)的新方法 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被遍歷出來了呢?
注意底層識別屬性時后擴展的屬性不能被識別為有效的共有屬性.