我有一个空的数组 - 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: copy
和
checkExisting data: function (){var i=new Array();for(var I=0,l=this.length;I<l;I++){i[I]=this[I]}return i}
我知道字符串作为变量传入,因为我在其他地方调用它们,并返回正确的字符串。
为什么它会返回一个函数而不是一个字符串?
感谢您的帮助
答案 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
循环遍历任何数组时,你将获得该功能。