Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Справочник по JavaScript
  4. Выражения и операторы
  5. instanceof

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

instanceof

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨июль 2015 г.⁩.

Операторinstanceof проверяет, принадлежит ли объект к определённому классу. Другими словами,object instanceof constructor проверяет, присутствует ли объектconstructor.prototype в цепочке прототиповobject.

Интерактивный пример

function Car(make, model, year) {  this.make = make;  this.model = model;  this.year = year;}const auto = new Car("Honda", "Accord", 1998);console.log(auto instanceof Car);// Expected output: trueconsole.log(auto instanceof Object);// Expected output: true

Синтаксис

object instanceof constructor

Параметры

object

Проверяемый объект.

constructor

Функция-конструктор, на которую идёт проверка.

Описание

Операторinstanceof проверяет, присутствует ли объектconstructor.prototype в цепочке прототиповobject.

js
// объявляем конструкторыfunction C() {}function D() {}var o = new C();// true, так как: Object.getPrototypeOf(o) === C.prototypeo instanceof C;// false, так как D.prototype не присутствует в цепочке прототипов oo instanceof D;o instanceof Object; // true, так как:C.prototype instanceof Object; // trueC.prototype = {};var o2 = new C();o2 instanceof C; // true// false, так как C.prototype отсутствует в цепочке прототипов oo instanceof C;D.prototype = new C(); // add C to [[Prototype]] linkage of Dvar o3 = new D();o3 instanceof D; // trueo3 instanceof C; // true, так как C.prototype теперь присутствует в цепочке прототипов o3

Обратите внимание: результат оператораinstanceof зависит от свойстваconstructor.prototype, поэтому результат оператора может поменяться после изменения этого свойства. Также результат может поменяться после изменения прототипаobject (или цепочки прототипов) с помощьюObject.setPrototypeOf или нестандартного свойства__proto__.

instanceof и множественные контексты (например, фреймы или окна)

Различные контексты имеют разные среды выполнения. Это означает, что они имеют различные built-ins (разный глобальный объект, различные конструкторы и т.д.). Это может давать неожиданные результаты. Например,[] instanceof window.frames[0].Array вернётfalse, потому чтоArray.prototype !== window.frames[0].Array а массив наследуется отArray.

Это может казаться несущественной проблемой сначала, но при работе с несколькими фреймами или окнами, и передачи объектов из одного контекста в другой с помощью функций, это может стать серьёзной проблемой. С другой стороны, безопасно проверить, является ли некоторый объект массивом можно используяArray.isArray(myObj).

Например, для проверки того, чтоNode являетсяSVGElement в разных контекстах можно использоватьmyNode instanceof myNode.ownerDocument.defaultView.SVGElement.

Примечание:Использование XPCOMinstanceof в коде имеет специальный эффект:obj instanceof xpcomInterface (напримерComponents.interfaces.nsIFile) вызываетobj.QueryInterface(xpcomInterface) и возвращаетtrue если проверка на QueryInterface прошла успешно. Побочным эффектом этого вызова является то, что можно использовать свойстваxpcomInterface наobj после успешной проверки с помощьюinstanceof. В отличии от стандартных глобальных JavaScript типов, проверкаobj instanceof xpcomInterface работает как ожидается, даже еслиobj относится к другому контексту.

Примеры

Показывает, чтоString иDate имеют типObject и граничные случаи

Следующий код используетinstanceof, чтобы показать что объектыString иDate также имеют типObject (они являются наследникамиObject).

Однако, объекты, созданные с помощью литералов, являются исключениями — хотя их prototype равенundefined, выражениеinstanceof Object возвращаетtrue.

js
var simpleStr = "Это обычная строка";var myString = new String();var newStr = new String("Строка, созданная с помощью конструктора");var myDate = new Date();var myObj = {};simpleStr instanceof String; // возвращает false, проверяет цепочку прототиповmyString instanceof String; // возвращает truenewStr instanceof String; // возвращает truemyString instanceof Object; // возвращает truemyObj instanceof Object; // возвращает true, несмотря на прототип, равный undefined({}) instanceof Object; // возвращает true, аналогично предыдущей строчкеmyString instanceof Date; // возвращает falsemyDate instanceof Date; // возвращает truemyDate instanceof Object; // возвращает truemyDate instanceof String; // возвращает false

Показывает, чтоmycar имеет типCar и типObject

Следующий код создаёт типCar и экземпляр этого типа,mycar. Операторinstanceof показывает, что объектmycar имеет типCar и типObject.

js
function Car(make, model, year) {  this.make = make;  this.model = model;  this.year = year;}var mycar = new Car("Honda", "Accord", 1998);var a = mycar instanceof Car; // возвращает truevar b = mycar instanceof Object; // возвращает true

Спецификации

Specification
ECMAScript® 2026 Language Specification
# sec-relational-operators

Совместимость с браузерами

Смотрите также

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp