类型错误:'instanceof' 操作数 'x' 无效
当 instanceof
运算符 的右侧操作数未与构造函数对象(即具有 prototype
属性且可调用的对象)一起使用时,会发生 JavaScript 异常 "'instanceof' 操作数无效"。
¥The JavaScript exception "invalid 'instanceof' operand" occurs when the right-hand side
operands of the instanceof
operator
isn't used with a constructor object, i.e. an object which has a prototype
property and is callable.
信息
¥Message
TypeError: Right-hand side of 'instanceof' is not an object (V8-based) TypeError: invalid 'instanceof' operand "x" (Firefox) TypeError: Right hand side of instanceof is not an object (Safari) TypeError: Right-hand side of 'instanceof' is not callable (V8-based) TypeError: x is not a function (Firefox) TypeError: x is not a function. (evaluating 'x instanceof y') (Safari) TypeError: Function has non-object prototype 'undefined' in instanceof check (V8-based) TypeError: 'prototype' property of x is not an object (Firefox) TypeError: instanceof called on an object with an invalid prototype property. (Safari)
错误类型
什么地方出了错?
¥What went wrong?
instanceof
运算符 期望右侧操作数是构造函数对象,即具有 prototype
属性并且可调用的对象。它也可以是具有 Symbol.hasInstance
方法的对象。如果出现以下情况,则可能发生此错误:
¥The instanceof
operator expects
the right-hand-side operands to be a constructor object,
i.e. an object which has a prototype
property and is callable. It can also be an object with a Symbol.hasInstance
method. This error can occur if:
示例
instanceof 与 typeof
¥instanceof vs. typeof
"test" instanceof ""; // TypeError: invalid 'instanceof' operand ""
42 instanceof 0; // TypeError: invalid 'instanceof' operand 0
function Foo() {}
const f = Foo(); // Foo() is called and returns undefined
const x = new Foo();
x instanceof f; // TypeError: invalid 'instanceof' operand f
x instanceof x; // TypeError: x is not a function
要修复这些错误,你需要将 instanceof
运算符 替换为 typeof
运算符,或者确保使用函数名称,而不是其计算结果。
¥To fix these errors, you will either need to replace
the instanceof
operator
with the typeof
operator,
or to make sure you use the function name, instead of the result of its evaluation.
typeof "test" === "string"; // true
typeof 42 === "number"; // true
function Foo() {}
const f = Foo; // Do not call Foo.
const x = new Foo();
x instanceof f; // true
x instanceof Foo; // true
也可以看看
¥See also