Symbol.hasInstance - JavaScript | MDN (original) (raw)
Try it
class Array1 {
static [Symbol.hasInstance](instance) {
return Array.isArray(instance);
}
}
console.log([] instanceof Array1);
// Expected output: true
Value
The well-known symbol Symbol.hasInstance.
| Property attributes of Symbol.hasInstance | |
|---|---|
| Writable | no |
| Enumerable | no |
| Configurable | no |
Description
The instanceof operator uses the following algorithm to calculate the return value of object instanceof constructor:
- If
constructorhas a[Symbol.hasInstance]()method, then call it withobjectas the first argument and return the result, coerced to a boolean. Throw a TypeError ifconstructoris not an object, or ifconstructor[Symbol.hasInstance]is not one ofnull,undefined, or a function. - Otherwise, if
constructordoesn't have a[Symbol.hasInstance]()method (constructor[Symbol.hasInstance]isnullorundefined), then determine the result using the same algorithm as Function.prototypeSymbol.hasInstance. Throw a TypeError ifconstructoris not a function.
Because all functions inherit from Function.prototype by default, most of the time, the Function.prototypeSymbol.hasInstance method specifies the behavior of instanceof when the right-hand side is a function.
Examples
Custom instanceof behavior
You could implement your custom instanceof behavior like this, for example:
class MyArray {
static [Symbol.hasInstance](instance) {
return Array.isArray(instance);
}
}
console.log([] instanceof MyArray); // true
function MyArray() {}
Object.defineProperty(MyArray, Symbol.hasInstance, {
value(instance) {
return Array.isArray(instance);
},
});
console.log([] instanceof MyArray); // true
Checking the instance of an object
Just in the same manner at which you can check if an object is an instance of a class using the instanceof keyword, we can also use Symbol.hasInstance for such checks.
class Animal {
constructor() {}
}
const cat = new Animal();
console.log(Animal[Symbol.hasInstance](cat)); // true
Specifications
| Specification |
|---|
| ECMAScript® 2026 Language Specification # sec-symbol.hasinstance |