0

これは私のコードです:

var x = [{letter: "a"}, {letter: "b"}, {letter: "c"}]

x.push({
    timer: setTimeout(function() {x.splice(x.length - 1, 1)}, 3000),
    letter: "j",
})

x.push({letter: "k"})

setTimeout(function() {alert(x)}, 4000)

そして、私の主な質問は、「a、b、c、k」を警告する必要があるときに、コードが「a、b、c、[A番号]」を警告するのはなぜですか?なぜ間違ったインデックスを削除するのですか?

4

2 に答える 2

0

x.splice(x.length, 1)で始まる 1 つの要素を削除しx.lengthます。これは、配列の境界外にあります。を使用するx.splice(x.length - 1, 1)か、または単にx.pop().

オブジェクトが配列からそれ自体を削除することを目的としている場合は、追加する前に長さを保存し、それを使用します。

var removeIndex = x.length;

x.push({
    timer: setTimeout(function() { x.splice(removeIndex, 1); }, 3000),
    letter: "j",
});
于 2013-07-07T14:25:13.553 に答える