Оператор instanceof - позволяет узнать принадлежит ли объект классу или классу наследующему от него.

Перед прочтенем статьи рекомендуется ознакомиться с new, __proto__, prototype.

См. также Object.create, constructor.

Синтаксис

объект instanceof Конструктор;

Примеры

Пример

Посмотрим несколько примеров:

[] instanceof Array; //true
[] instanceof Object; //true
[] instanceof RegExp; //false

new RegExp() instanceof RegExp //true;
new RegExp() instanceof Object //true;
new RegExp() instanceof Array //false;

function User() {}
new User() instanceof User //true
new User() instanceof Object //true
new User() instanceof Array //false

Таким образом можно видеть, что массивы принадлежат классу Array, но в тоже время принадлежит классу Object (так как Array наследует от Object). Тоже самое и с RegExp, и любым другим конструктором.

Пример

Имеем конструктор:

function User(name) {
	this.name = name;
}

var andrey = new User('Андрей');

Но если его вызвать без new, то он будет работать не правильно: в обычно режиме this будет равно window, а в строгом - будет ошибка. Если нужно чтобы конструктор работал правильно и без new можно писать так:

function User(name) {
	if ( !(this instanceof User) ) {
		return new User(name);
	}

	this.name = name;
}

var andrey = new User('Андрей');
var jon = User('Джон');

Работает это так: если фукнцию вызвали без new, то this в ней равен объекту перед последней точкой, либо window(или undefined) если точек нет (см. статью про this). Следовательно this - это уже не экземпляр User, а значит условие сработает. И конструктор будет вызван уже с new.