JavaScriptの中のargmentsオブジェクト
3634 ワード
JavaScriptの中のargmentsオブジェクト
argmentsは同じ配列のオブジェクトであり、関数に渡すパラメータに対応しています.
構文
argmentsオブジェクトは、すべての関数で利用可能な局所変数です.関数のパラメータは、アーグメンントオブジェクトを使って参照できます.このオブジェクトには、関数に渡す各パラメータの項目があります.最初の項目の索引は0から始まります.例えば、一つの関数が三つのパラメータを伝達する場合、それらを参照してください.
それらに関心があるならば、argmentsオブジェクトを遍歴して新しい配列を作成してみます.
もう一つの方法は無視された/軽蔑された/軽蔑されたAray構造関数を関数として軽蔑することである.アーグメンントオブジェクトは関数の内部でのみ有効であり、関数の外部でアーグメンントオブジェクトを呼び出すとエラーが発生します. アーグメンントのtypeofは'object'に戻ります. は、インデックスを使用して、それぞれのアーグメンントのタイプを決定することができる.
属性
いくつかの文字列を接続する関数を定義します.
この例は、文字列を接続する関数を定義しています.この関数が唯一正式に宣言したパラメータは、接続点として文字列を接続する文字を指定する文字列です.この関数の定義は以下の通りです.
この例では、一つの文字列を通してHTMLリストを作成する関数を定義しています.この関数が唯一公式に宣言したパラメータは1文字です.このパラメータが「u」の場合、無秩序リスト(項目リスト)を作成します.このパラメータが「o」の場合、順序リスト(番号リスト)が作成されます.この関数の定義は以下の通りです.
ES 6の矢印関数は、自分の
GitHub:https://github.com/microzz 個人サイト:https://microzz.com/
argmentsは同じ配列のオブジェクトであり、関数に渡すパラメータに対応しています.
構文
arguments
説明argmentsオブジェクトは、すべての関数で利用可能な局所変数です.関数のパラメータは、アーグメンントオブジェクトを使って参照できます.このオブジェクトには、関数に渡す各パラメータの項目があります.最初の項目の索引は0から始まります.例えば、一つの関数が三つのパラメータを伝達する場合、それらを参照してください.
arguments[0]
arguments[1]
arguments[2]
パラメータを設定しても良いです.arguments[1] = 'new value';
arguments
オブジェクトはArray
ではない.配列に似ていますが、長さ以外には配列属性がありません.例えば、pop
方法がない.しかし、これは本物の配列に変換できます.let args = Array.prototype.slice.call(arguments);
let args = [].slice.call(arguments);
Array.from()
方法またはspread
演算子を使用して、argmentsを本物の配列に変換することもできます.let args = Array.from(arguments);
let args = [...arguments];
パラメータにsliceを使うと、あるJavaScriptエンジンの最適化(例えばV 8エンジン)を阻止します.それらに関心があるならば、argmentsオブジェクトを遍歴して新しい配列を作成してみます.
もう一つの方法は無視された/軽蔑された/軽蔑されたAray構造関数を関数として軽蔑することである.
let args = (
arguments.length === 1 ?
[arguments[0]] :
Array.apply(null, arguments)
);
Aray generaicsが利用可能であれば、以下のコードを代替として使用することができる.var args = Array.slice(arguments);
console.log(typeof arguments); // 'object'
console.log(typeof arguments[0]);
// typeof。
関数を呼び出すと、この関数のパラメータの数がその明示的な宣言のパラメータの数より多い場合、argmentsオブジェクトを使用することができます.この技術はパラメータの数が変数の関数である場合に有用である.argments.lengthでパラメータの数を得ることができます.その後、argments ojectで各パラメータを処理することができます.(関数署名を求めるパラメータの数は、Funtions.length属性を使用してください.)属性
arguments.callee
// 。
arguments.caller
// 。
arguments.length
// 。
例いくつかの文字列を接続する関数を定義します.
この例は、文字列を接続する関数を定義しています.この関数が唯一正式に宣言したパラメータは、接続点として文字列を接続する文字を指定する文字列です.この関数の定義は以下の通りです.
function myConcat(separator) {
var args = Array.prototype.slice.call(arguments, 1);
return args.join(separator);
}
関数に任意の数のパラメータを渡すことができます.関数は各パラメータを項目としてリストを作成します.myConcat(", ", "red", "orange", "blue");
// returns "red, orange, blue"
myConcat("; ", "elephant", "giraffe", "lion", "cheetah");
// returns "elephant; giraffe; lion; cheetah"
myConcat(". ", "sage", "basil", "oregano", "pepper", "parsley");
// returns "sage. basil. oregano. pepper. parsley"
HTMLリストを作成する方法を定義します.この例では、一つの文字列を通してHTMLリストを作成する関数を定義しています.この関数が唯一公式に宣言したパラメータは1文字です.このパラメータが「u」の場合、無秩序リスト(項目リスト)を作成します.このパラメータが「o」の場合、順序リスト(番号リスト)が作成されます.この関数の定義は以下の通りです.
function list(type) {
var result = "";
var args = Array.prototype.slice.call(arguments, 1);
result += args.join(" ");
result += " " + type + "l>"; // end list
return result;
}
関数に任意の数のパラメータを渡すことができます.関数は各パラメータを項目として最初のパラメータ指定タイプのリストに追加します.var listHTML = list("u", "One", "Two", "Three");
/* listHTML is:
"- One
- Two
- Three
"
*/
注意ES 6の矢印関数は、自分の
arguments
オブジェクトを持っていないが、ほとんどの場合、rest
パラメータは、解決策を与えることができる.let a;
const fn = (...rest) => Array.prototype.slice.call(rest, 1);
a = fn(1, 2); // [2]
についてGitHub:https://github.com/microzz 個人サイト:https://microzz.com/