1

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

然后填充 - currentChatSessions[privateSessionID]=targetUser;(这是一个字符串,例如'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}

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

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

谢谢您的帮助

4

3 回答 3

4

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

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

for (var i = 0; i < array.length; i++)
于 2012-09-04T06:02:20.397 回答
2

看起来你真正想做的是:

var currentChatSessions = {};

注意乳头支架而不是牙套。

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

于 2012-09-04T06:02:18.143 回答
2

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

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

否则,Array 的其他可枚举属性会包含在循环中,从而导致您遇到不可预知的结果。

于 2012-09-04T05:59:34.557 回答