Отрицание instanceof в JavaScript: условный оператор без else
Пройдите тест, узнайте какой профессии подходите
Быстрый ответ
Для проверки того, что объект obj
не является экземпляром типа Type
, применяется конструкция !(obj instanceof Type)
. Этот подход позволяет точно определить, что объект не был создан на основе конкретного класса или прототипа.
Пример кода:
if (!(obj instanceof MyClass)) {
// obj не относится к классу MyClass. Экзамен не сдан!
}
В этом примере замените obj
на ваш объект, а MyClass
– на класс, который вы хотите проверить. Если obj
не был создан на основе MyClass
, то условие вернёт значение true. Как вам такое утверждение?
Подробнее о операторе NOT с instanceof
В выражениях без скобок оператор !
имеет приоритет перед instanceof
и будет применен в первую очередь. Поэтому при проверке обязательно используйте круглые скобки ()
вокруг выражения с instanceof
, чтобы точно соблюсти порядок выполнения операций. Небрежное отношение к этому правилу может привести к синтаксической ошибке или к некорректному результату.
Правильный вариант:
if (!(obj instanceof Array)) {
// obj точно не является массивом.
}
Неправильный вариант:
if (!obj instanceof Array) {
// Такое выражение всегда будет ложным для любого объекта, ведь оно вводит в заблуждение.
}
Чтобы повысить читаемость, иногда разработчики используют двойные скобки, хотя это не является обязательным:
if ((!(obj instanceof Array))) {
// obj не является массивом, однако мы пошли на перестраховку с дополнительными скобками!
}
Изучение альтернативных подходов
Помимо !(obj instanceof Type)
, существуют и другие возможности, которые могут увеличить ясность или более точно передать намерения:
Инвертируем логическое значение
if ((obj instanceof Array) === false) {
// obj действительно не является массивом. Точка зрения ясна.
}
Использование переменной для наглядности
const isNotArray = !(obj instanceof Array);
if (isNotArray) {
// obj не массив, что мы и четко обозначили этим фактом.
}
Такие варианты могут облегчить понимание кода для тех, кто более мало знаком с конструкцией !instanceof
.
Остерегайтесь ошибок
Следующие аспекты важно учесть при использовании !instanceof
:
- Запоминание приоритетов: не забывайте о круглых скобках, чтобы не попасть в ловушку приоритетов операторов.
- Объекты null или undefined:
instanceof
выбрасывает исключение, еслиobj
равенnull
илиundefined
. Поэтому перед проверкой убедитесь в валидностиobj
. - Особенности цепочки прототипов:
instanceof
анализирует всю цепочку прототипов, поэтому при проверке экземпляра подкласса как суперкласс, результат будетtrue
.
Визуализация
Можно представить использование !instanceof
как действия бармена в ночном клубе, который отсеивает тех, кто не входит в VIP-список, направляя их в общий зал:
Если 🚶♂️ (!instanceof 🎩VIP) {
🚪👮♂️ "Поверьте, в обычном зале тоже неплохо!"
}
В то же время настоящие VIP-персоны без проблем проходят этот фильтр – они входят в список избранных и могут открыть двери в VIP-зону:
if (!(guest instanceof VIP)) {
// логика для обычных посетителей, ведь этот гость не из VIP списка.
}
Помните о лучших практиках
При использовании !instanceof
обратите внимание на следующие рекомендации:
- Следите за консистентностью: придерживайтесь одного и того же стиля во всем проекте для улучшения читаемости и упрощения поддержки.
- Пишите код осознанно, документируйте тщательно: не пренебрегайте комментариями, если типы в вашем коде играют ключевую роль.
- Проверяйте безопасность: прежде чем использовать
instanceof
, убедитесь, чтоobj
не равенnull
илиundefined
, чтобы избежать ошибок при выполнении. - Ищите информацию на MDN: регулярно обновляйте свои знания, консультируясь со справочником MDN по использованию операторов и особенностям JavaScript.
Полезные материалы
- instanceof – JavaScript | MDN — полное руководство по использованию
instanceof
. - Class checking: "instanceof" — разъяснение
instanceof
с большим количеством примеров. - What is the instanceof operator in JavaScript? – Stack Overflow — обсуждение и примеры использования
instanceof
. - Prototypes in JavaScript — связь между
instanceof
и прототипами в JS. - JavaScript Inheritance – Polymorphism and Inheritance — полиморфизм и использование
instanceof
для понимания наследования в JavaScript.