配列のようなオブジェクトがあります。これは、数値プロパティ ( 0
、1
、2
...) とプロパティがあることを意味しlength
ます。
そのプロトタイプでは、次のように、それをクリアするメソッドを宣言します。
'clear': function() {
Array.prototype.splice.call(this, 0, this.length);
return this;
}
これは、ほとんどのブラウザーで期待どおりに機能しますが、Internet Explorer では機能しません。
完全に有効な配列のようなオブジェクトを取得します。
var arrayLike = {
length: 3,
'0': 'a',
'1': 'b',
'2': 'c'
};
そしてそれを明確につなぎ合わせます:
Array.prototype.splice.call(arrayLike, 0, arrayLike.length);
標準準拠のブラウザーでは、これは正しい結果です。
arrayLike.length == 0 ;
arrayLike[0] == undefined;
arrayLike[1] == undefined;
arrayLike[2] == undefined;
しかし、IE 8 では、次のようになります。
arrayLike.length == 0 ; // (!!)
arrayLike[0] == 'a';
arrayLike[1] == 'b';
arrayLike[2] == 'c';
はい、それは機能するかどうかに関係なく、必要なだけ機能します。
Array.prototype.splice.call
今、配列のようなオブジェクトをネイティブにクリアする唯一の方法だと思います。おそらく、IE8 の場合は条件付きでプライベート コピーにポリフィルすることができます (他のブラウザーでは 1 回だけパフォーマンス ヒットが発生しますが、1 回だけです)。
それとも、オブジェクトをクリアする別の方法がありますか? それもIE8でネイティブ?私が見ていないものはありますか?
Ps: IE8 で実行するためのJsFiddle 。