一般的には使用されませんが、実際に数値を属性名としてオブジェクトに追加できます。
var obj = {};
obj[0] = 1;
このオブジェクトは配列型ですが、配列型に変換する方法はありますか? jQuery コードは Array.prototype.slice を使用してこの種のオブジェクトを配列に変換しますが、何度か試しましたがうまくいきませんでした:
var obj = {};
obj[0] = 1;
obj[1] = 2; 🎜>alert(Array.prototype .slice.call(obj));
上記のコードは、IE ではエラーを直接報告しますが、出力内容は空です。つまり、変換に失敗しました。この組み込みメソッドの問題については、
ECMA-262
を確認するのが最善です。スライス メソッドの実行プロセスの最初の 2 つのステップは次のとおりです:
1. A を、式 new Array() によって作成されたかのように作成された新しい配列とします。
2. 引数「length」を指定してこのオブジェクトの [[Get] ] メソッドを呼び出します。
パラメータの長さはここで指定されます。 obj オブジェクトには数値インデックスがありますが、長さ属性はありません。実は、そこが問題です。slice メソッドは、このオブジェクトの長さを知りません。コードを変更して長さ属性を追加するだけです:
var obj = {};
obj[1] = 2;
alert(Array.prototype.slice.call()オブジェクト));
出力内容は「1,2」となり、コピーは成功しました。これは、スライスメソッドを呼び出すときに、数値インデックスと長さ属性があれば、
を配列
に変換できるという意味ですか? 。
この法則はほとんどのブラウザに当てはまります。ただし、IE 環境では、HtmlCollection などの DOM 要素のコレクションの場合、上記の特性を持っていても、slice を呼び出すとエラーが報告されます。