補充: 避免使用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]);
        }
    }