補充: 避免使用for in 的原因 - TerryLee7788/JS_test GitHub Wiki
避免使用for in 的原因:
我大概知道為什麼建議最好不要用 "for in" 的方法取值了,
原因是因為, 如果使用 "for in" 的方法取得物件內的值,
它會取得遍布於物件內包含 prototype 的 "屬性" 以及 "方法",
這時候, 取得出來的值, 有可能並不是我們想要的,
那通常我們如果使用 "for in" 的話, 需要自己多進行一個 "過濾" 的動作,
("過濾" 就是指: "hasOwnProperty"方法, 以及加入"條件進行判斷", 如果是物件內有 function也進行過濾)
所以在這個地方, 若使用 "for in" 的話, 又沒有嚴謹的過濾這個物件內的值就使用 "for in" 迴圈取值,
就會有可能造成 "for in" 取出來的值, 並不是自己想要的.
所以在這邊補充一下, 避免使用 "for in" 的原因.
附上JS Code:
//在Object原型加入"方法"及"屬性"
Object.prototype.sum = function(){
var total = 0;
for(var i = 0; i<this.length; i++){
total += this[i];
}
return total;
};
Object.prototype.name = 'Terry_in_prototype';
var obj = obj || { name: 'Terry',
age: 25,
bd: '12/25',
showMe: function(){
console.log(this.name + ', ' + this.age + ', ' + this.bd);
}
}, val;
for( val in obj ){
//若沒加入此條件, 就會取出一些 "奇奇怪怪的東西", 而這些 "奇奇怪怪的東西" 並不是我想要的
if( typeof obj[val] !== 'function' && obj.hasOwnProperty(val) ){
console.log(val + ':' + obj[val]);
}
}