Javascript for循环返回“copy”作为值

时间:2012-09-04 05:57:09

标签: javascript jquery

我有一个空的数组 - var currentChatSessions = [];

然后填充 - currentChatSessions[privateSessionID]=targetUser;(这是一个字符串,ex'myName')

我有一个迭代数组的函数 -

function checkExisting(from){//check for existing chats with that user
        var oldId=0;
//*         
        for(var index in currentChatSessions) { 
            console.log('checkExisting index: ' + index);
            console.log('checkExisting data: ' + currentChatSessions[index]);

            if (currentChatSessions[index] == from){
                oldId=index;
                console.log('check Existing: ' + oldId);
            }
            break;

        }
//*/        
        console.log('check existing oldId: ' + oldId);
        return oldId;
    };

并将其记录到控制台 - checkExisting index: copycheckExisting data: function (){var i=new Array();for(var I=0,l=this.length;I<l;I++){i[I]=this[I]}return i}

我知道字符串作为变量传入,因为我在其他地方调用它们,并返回正确的字符串。

为什么它会返回一个函数而不是一个字符串?

感谢您的帮助

3 个答案:

答案 0 :(得分:4)

for (var x in array)会将数组上的所有属性迭代为可枚举,而不仅仅是数组元素。这可以包括那些价值将是代码的方法,这些代码可以解释你所看到的内容。我猜你可能正在使用一些代码(库或只是代码),它们以一种使它们可枚举的方式为你的数组添加方法。

您应该仅通过索引从0.length - 1迭代数组。有几种方法可以做到这一点,但经典的方法是:

for (var i = 0; i < array.length; i++)

答案 1 :(得分:2)

对于数组,你必须使用另一种循环方式 - 而不是for ... in

for(var index=0;index<currentChatSessions.length;index+=1) { /*...*/ }

否则,循环中会包含其他enumerable properties数组,从而导致您遇到的不可预测的结果。

答案 2 :(得分:2)

看起来你真正想做的是:

var currentChatSessions = {};

注意乳头括号而不是括号。

您可能有一个扩展Array原型的库。在对象上执行for-in时,它将显示该对象上的所有方法。有人可能正在Array.prototype.something = function() {};,所以当你使用for in循环遍历任何数组时,你将获得该功能。