ホームページ >ウェブフロントエンド >jsチュートリアル >関数の実パラメータをarray_javascriptに変換する方法スキル

関数の実パラメータをarray_javascriptに変換する方法スキル

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

幸いなことに、配列のスライス メソッドを通じて引数オブジェクトを実数の配列に変換できます:
var args = Array.prototype.slice.call(arguments);
スライス メソッドの場合、ECMAScript 262 15.4. Array.prototype.slice (start, end) この章には注記があります:

コードをコピーします コードは次のとおりです:

スライス関数は意図的にジェネリックであるため、この値が Array オブジェクトである必要はありません。そのため、スライス関数を正常に適用できるかどうかを他の種類のオブジェクトに転送できます。ホスト オブジェクトへの変換は実装に依存します。 「Pro JavaScript Design Patterns」
(「JavaScript Design Patterns」) の著者である

Dustin Diaz はかつて次のように指摘しました。

コードをコピー コードは次のとおりです:代わりに…
var args = Array.prototype.slice.call(arguments); // Yi Fei のメモ: 以下、メソッド 1 と呼びます。
var args = [].slice.call(arguments, 0); Fei のメモ: 以下、方法 2 と呼びます


しかし、この 2 つのパフォーマンスの違いは本当に存在するのでしょうか?簡単な個人的なテストの結果、次のことがわかりました。

arguments.length が小さい場合、メソッド 2 はパフォーマンスでわずかに有利ですが、arguments.length が大きい場合、メソッド 1 がわずかに有利です。

最後に 3 番目のメソッドが追加されます。これは最も昔ながらの方法です:




コードをコピーします
コードは次のとおりです: var args = []; for (var i = 1; i < argument.length; i ) {
args.push(arguments[i] );
}


ただし、通常の場合は、2 番目の方法を使用することを個人的にお勧めします。ただし、どの解決策にも最善のものはなく、最も適切なもののみです。



コードをコピーします
コードは次のとおりです。 var args = [].slice.call(arguments, 0); 理由は 2 つあります。

一般関数の argument.length は 10 以内であり、方法 2 には利点があります。
方法 2 のコード量も、方法 2 のコード量よりも少なくなります。最初の方法は、少なくとも少しバイトを減らすことができます ^^



NodeList

(例: document.getElementsByTagName('div')) を配列に変換するにはどうすればよいですか? 解決策は次のように簡単です:


コードをコピー

コードは次のとおりです: function nodeListToArray(nodes){ var arr, length;
try {
// IE を除くすべてのブラウザで動作します
arr = [].slice.call(nodes); arr;
} catch(err){
// 遅いが、IE では動作する
arr = [];
length = nodes.length; < length; i ){
arr.push(nodes[i]);
return
}
NodeList ができない理由IE[ ].slice.call(nodes) メソッド変換で使用できますか?
Internet Explorer では、DOM NodeList が JavaScript オブジェクトではないため、Array.prototype.slice.call(nodes) を実行できないというエラーがスローされます。
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。