Объекты являются экземплярами функции конструктора, поэтому проверка состоит в том, чтобы увидеть, является ли левая рука экземпляром права, поэтому правая часть должна быть функцией (и это должен быть конструктор, который создалвозвращаемый объект true
).
[1,2,3] instanceof [].constructor; // true
Таким образом, чтобы ответить на вопрос более прямо, ваше первоначальное понимание правильное, и сообщение об ошибке кажется вводящим в заблуждение (в любом случае, мне).
Из спецификации: http://ecma262 -5.com / ELS5_HTML.htm # Section_11.8.6
1.8.6 Оператор instanceof
Производственный экземпляр RelationalExpression: RelationalExpression экземпляра ShiftExpression оценивается следующим образом:
- Пусть lref будет результатом вычисления RelationalExpression.
- Пусть lval будет GetValue (lref).
- Пусть rref будет результатом вычисления ShiftExpression.
- Пусть rval будет GetValue (rref).
- Если Type (rval) не является Object, выдается исключение TypeError.
- Если rval неиметь внутренний метод [[HasInstance]], генерировать исключение TypeError.
- Возвращать результат вызова внутреннего метода [[HasInstance]] для rval с аргументом lval.
и http://ecma262 -5.com / ELS5_HTML.htm # Section_15.3.5
15.3.5 Свойства экземпляров функций
В дополнение к обязательным внутренним свойствам каждый экземпляр функции имеет внутреннее свойство [[Call]] и в большинстве случаев использует другую версию внутреннего свойства [[Get]]. В зависимости от того, как они созданы (см. 8.6.2, 13.2, 15 и 15.3.4.5), экземпляры функций могут иметь внутреннее свойство [[HasInstance]] , внутреннее свойство [[Scope]],внутреннее свойство [[Construct]], внутреннее свойство [[FormalParameters]], внутреннее свойство [[Code]], внутреннее свойство [[TargetFunction]], внутреннее свойство [[BoundThis]] и [[BoundArgs]] внутренняя собственность.
Так что требуется TypeError
, если правая рука не имеет внутреннего свойства [[HasInstance]]
, но не указывает формулировку.
Firefox 4 дает мне многоболее заметное сообщение об ошибке:
[1,2,3] instanceof [];
// TypeError: invalid 'instanceof' operand []