ホームページ  >  記事  >  ウェブフロントエンド  >  js_javascript のヒントで数値属性名を持つオブジェクトを配列に変換する

js_javascript のヒントで数値属性名を持つオブジェクトを配列に変換する

WBOY
WBOYオリジナル
2016-05-16 18:09:391136ブラウズ

一般的には使用されませんが、実際に数値を属性名としてオブジェクトに追加できます。

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

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 を呼び出すとエラーが報告されます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。