0

コードは次のとおりです。

$('input').click(function(){
    window.array[$(this).attr('id')]=true;
    console.log('Input id: '+$(this).attr('id')+' - Num:'+window.array.length+
        ' - Array value:'+window.array[$(this).attr('id')]);
    alert(window.array.join('\n'));
});

動作は非常に奇妙です。イベントが発生すると、コンソールで読み取ることができInput id: example_id - Num:0 - Array value:true、アラートで未定義になります(空の配列ですか?しかし、コンソールは正しい値を教えてくれました!)。

別の入力をクリックすると、前のイベントが発生していないなど、まったく同じことが起こります。コールバック関数は呼び出されるたびに配列を作成するようですが、私はウィンドウオブジェクトを使用しており、ウィンドウオブジェクトへの配列のアタッチはグローバル変数と同じであると言われました。

この奇妙な行動を説明してもらえますか?

4

2 に答える 2

1

配列のlengthプロパティは、その最大の数値プロパティに 1 を加えたもの (数値プロパティがない場合はゼロ) です。したがって、配列に数値以外のプロパティを設定しても、その長さは変わりません。

join数値プロパティにも影響するだけです。それでも、結果は未定義ではなく空の文字列になるはずです。通常の配列を使用していますか?

于 2012-12-07T21:36:29.367 に答える
0

「ID」として文字列を使用する必要があるため、状況によってはオブジェクトを使用する必要があります。

定義した場合:

window.array = [ ]

そして書く:

window.array["id1"] = true; // WRONG!

上記は、次のことを意味します。

window.array["id1"] //true but window.array is still [ ]

これは window.array が原因です。ただし、配列は JavaScript では依然としてオブジェクトであり、プロパティを追加することはできますが、使用方法が間違っています。配列に追加するには、インデックスとして整数 (または文字列形式の整数) が必要です。

window.array[1] = true; // OR window.array["1"] = true (!! even this works)
于 2012-12-07T21:33:24.200 に答える