Книга: JavaScript. Подробное руководство, 6-е издание
4.9.4. Оператор instanceof
4.9.4. Оператор instanceof
Оператор instanceof
требует, чтобы левым операндом был объект, а правым - имя класса объектов. Результатом оператора будет значение true
, если объект, указанный слева, является экземпляром класса, указанного справа. В противном случае результатом будет false
. В главе 9 рассказывается, что классы объектов в языке JavaScript определяются инициализировавшей их функцией-конструктором. Следовательно, правый операнд оператора instanceof
должен быть именем функции-конструктора. Например:
var d = new Date(); // Создать новый объект с помощью конструктора Date()
d instanceof Date; // Вернет true; объект d был создан с функцией Date()
d instanceof Object; // Вернет true; все объекты являются экземплярами Object
d instanceof Number; // Вернет false; d не является объектом Number
var a = [1, 2, 3]; // Создать массив с помощью литерала массива
a instanceof Array; // Вернет true; а - это массив
a instanceof Object; // Вернет true; все массивы являются объектами
a instanceof RegExp;// Вернет false; массивы не являются регулярными выражениями
Обратите внимание, что все объекты являются экземплярами класса Object
. Определяя, является ли объект экземпляром класса, оператор instanceof
принимает во внимание и «суперклассы». Если левый операнд instanceof
не является объектом, instanceof
возвращает false
. Если правый операнд не является функцией, возбуждается исключение ТуреЕггог
.
Чтобы понять, как действует оператор instanceof
, необходимо познакомиться с таким понятием, как «цепочка прототипов». Это - механизм наследования в JavaScript; он описывается в разделе 6.2.2. Чтобы вычислить значение выражения о instanceof f
, интерпретатор JavaScript определяет значение f.prototype
и затем пытается отыскать это значение в цепочке прототипов объекта о
. В случае успеха объект о
считается экземпляром класса f
(или суперкласса класса f
), и оператор возвращает true
. Если значение f.prototype
отсутствует в цепочке прототипов объекта о
, то объект о
не является экземпляром класса f
и оператор instanceof
возвращает false
.
- 9.5.1. Оператор instanceof
- Оператор instanceof
- Несколько новых операторов и ключевых слов
- Арифметические операторы
- 1.2.4. Операторы и приоритеты
- Условные операторы
- 1. Оператор Select – базовый оператор языка структурированных запросов
- Поразрядные операторы
- Оператор цикла foreach
- Логические операторы
- Оператор goto
- A7.11. Оператор побитового И