4

次のコードを実行するとします。

var a = [];
a[4] = true;

次に、配列は次のようになります[undefined, undefined, undefined, undefined, true]

しかし、このコードを実行すると:

var a = [];
a.splice(4, 0, true);

[true]代わりに、まあ、[undefined, undefined, undefined, undefined, true]

splice を使用する場合、インデックスが配列の現在の長さを超えると、最後の要素で停止します。

これがスプライスの意図された動作である理由は何ですか?

4

1 に答える 1

2

ECMA ドキュメントによると、「開始」引数は配列の長さを超えることはできません。または、配列の長さに設定されています。

5 - relativeStart を ToInteger(start) にします。

6 - relativeStart が負の場合、actualStart を max((len + relativeStart),0) にします。それ以外の場合は、actualStart を min(relativeStart, len) にします。

http://www.ecma-international.org/ecma-262/5.1/#sec-15.4.4.12

正確な理由については、よくわかりませんが、メソッドが配列に項目を追加した場合、直感に反すると考えたのかもしれません。

于 2013-07-02T23:28:53.367 に答える