TypeError: 无效的 'instanceof' 操作数 'x'
JavaScript 异常 "invalid 'instanceof' operand" 发生在 instanceof
运算符 的右侧操作数没有使用构造函数对象时,即没有 prototype
属性且可调用的对象。
消息
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)
错误类型
哪里出了问题?
instanceof
运算符 预期右侧操作数为构造函数对象,即具有 prototype
属性且可调用的对象。它也可以是具有 Symbol.hasInstance
方法的对象。如果出现以下情况,则可能会出现此错误:
示例
instanceof 与 typeof
js
"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
要修复这些错误,您需要用 typeof
运算符 替换 instanceof
运算符,或者确保使用函数名称,而不是其求值结果。
js
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