したがって、引数のインスタンスは何ですか?
Object
のインスタンスです。あなたはそれを識別するためにinstanceof
と一緒に使うことができる公衆Arguments
コンストラクタがないようです。
あなたが一意に識別したい場合は、:
Object.prototype.toString.call(arguments) === "[object Arguments]"
はそれを識別するための安全な方法です。
section 9.4.4 in the EcmaScript 6 specificationの場合、arguments
オブジェクトは通常のオブジェクトまたはエキゾチックオブジェクトのいずれかです。ここでは、仕様が言うことだ:
ほとんどのECMAScript関数は、その コードに使用可能な引数のオブジェクトを作ります。関数定義の特性に応じて、 引数オブジェクトは普通オブジェクトまたは引数 エキゾチックオブジェクトのいずれかです。
引数エキゾチック 目的は、配列のインデックスプロパティがその関連 のECMAScript関数の呼び出しの 仮パラメータのバインディングにマップエキゾチックな目的です。
引数エキゾチックオブジェクトは、通常のオブジェクトと同じ内部 スロットを持ちます。また、[[ParameterMap]]内部に スロットもあります。通常の引数オブジェクトには、[[ParameterMap]]内部の スロットがあり、値は常に未定義です。通常の引数オブジェクトの場合、 [[ParameterMap]]内部スロットは、 Object.prototype.toString(19.1.3.6)によってのみ使用され、そのように識別されます。
「エキゾチックな」オブジェクトなので、基本的にすべての通常の予定された規則に従わないことを意味します。たとえば、独自のオブジェクトを作成できるコンストラクタ関数はありません。また、publicコンストラクタ関数がないため、おそらくそれがユニークに識別できるようにテストできるinstanceof
がない理由も説明されています。
は 'strict'モードでこれを行うことはできませんを使用してから返された関数の名前を取得することができます。 – jfriend00
@ jfriend00はい。詳細へのリンクが含まれています。 – guest271314