Так что аргументы являются примером?
Это пример Object
. Кажется, нет никакого публичного конструктора Arguments
, который вы можете использовать с instanceof
, чтобы идентифицировать его таким образом.
Если вы хотите, чтобы однозначно идентифицировать его, а затем:
Object.prototype.toString.call(arguments) === "[object Arguments]"
является безопасным способом идентифицировать его.
В отношении section 9.4.4 in the EcmaScript 6 specification объект arguments
является обычным объектом или экзотическим объектом. Вот что говорит спецификация:
Большинство функций ECMAScript предоставляют объекты аргументов, доступные для их кода . В зависимости от характеристик определения функции его аргументным объектом является либо обычный объект, либо аргументы экзотический объект.
An аргументов экзотическое объект представляет собой экзотический объект, массив индекса свойство карты к формальным параметрам переплетов с вызовом связанной с ним функцией ECMAScript.
Аргументы экзотических объектов имеют одинаковые внутренние слоты как обычные объекты. Они также имеют внутренний разъем [[ParameterMap]] . Объекты обычных аргументов также имеют внутренний слот [[ParameterMap]] , значение которого всегда не определено. Для обычных объектов аргументов внутренний слот [[ParameterMap]] используется только Object.prototype.toString (19.1.3.6), чтобы идентифицировать их как таковые.
Поскольку это «экзотический» объект, это по существу означает, что он не соответствует всем нормальным и ожидаемым соглашениям. Например, нет функции-конструктора, из которой вы можете создать свой собственный объект. И, поскольку нет никакой функции конструктора public, это, вероятно, также объясняет, почему нет instanceof
, что вы можете протестировать его, чтобы однозначно идентифицировать его.
не может сделать это в 'strict' режиме. – jfriend00
@ jfriend00 Да; включая ссылку на более подробную информацию. – guest271314