为什么我的javascript数组中有一个函数?

时间:2014-01-14 10:21:42

标签: javascript arrays

以下代码循环遍历数组。它在casperJS脚本中运行,因此是一个phantomJS无头浏览器环境

socket.on('list', function(data){
                console.log("Message", JSON.stringify(data)); //no func def in this data
                var localMatchStore= [];
                for (var i in data.matches) {
                   localMatchStore.push(data.matches[i]);
                }
                console.log(localMatchStore);

            });

这将返回我期望的数据,但也返回一个函数定义作为数组中的最后一项。这是为什么?

0580:MS101:2014,0580:MS127:2014,0580:MS128:2014,0901:LS162:2014,function () {
        for(var i=0,sum=0;i<this.length;sum+=this[i++]);
        return sum;
    }

1 个答案:

答案 0 :(得分:1)

尝试将hasOwnProperty()for..in一起使用。该循环结构可以包括通过原型链继承的对象成员。 hasOwnProperty()确保该属性是直接成员。

socket.on('list', function(data){
    console.log("Message", JSON.stringify(data)); //no func def in this data

    var localMatchStore= [];

    for (var i in data.matches) {
        if (data.matches.hasOwnProperty(i)) localMatchStore.push(data.matches[i]);
    }

    console.log(localMatchStore);

});

有关此功能的更深入讨论,请参阅MDN上的here