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: copyそして checkExisting 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からまでのインデックスのみで配列を反復する必要があります.length - 1。これにはいくつかの方法がありますが、古典的な方法は次のとおりです。

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

配列の場合、次の代わりに別のループ方法を使用する必要がありますfor ... in

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

そうしないと、配列の他の列挙可能なプロパティがループに含まれ、予期しない結果が発生します。

于 2012-09-04T05:59:34.557 に答える
2

あなたが本当にやりたいことは次のとおりです。

var currentChatSessions = {};

ブレースの代わりに乳首ブラケットに注意してください。

おそらく、Array プロトタイプを拡張するライブラリーを持っているでしょう。オブジェクトに対して for-in を実行すると、そのオブジェクトのすべてのメソッドが表示されます。Array.prototype.something = function() {};その関数を取得して配列をループすると、誰かがおそらくそうしてfor inいます。

于 2012-09-04T06:02:18.143 に答える