JavaScriptの中のargmentsオブジェクト

3634 ワード

JavaScriptの中のargmentsオブジェクト
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);
  • アーグメンントオブジェクトは関数の内部でのみ有効であり、関数の外部でアーグメンントオブジェクトを呼び出すとエラーが発生します.
  • アーグメンントのtypeofは'object'に戻ります.
  • 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/