Проверка существования объекта в JavaScript: обработка ошибок

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Рассмотрим методы, которые наиболее часто используются для проверки наличия свойства в объекте:

  • Использование оператора in позволяет проверить наличие свойства, включая унаследованные:
JS
Скопировать код
if ('key' in obj) { // свойство установлено }
  • Метод .hasOwnProperty ограничивает проверку только собственными свойствами объекта:
JS
Скопировать код
if (obj.hasOwnProperty('key')) { // свойство точно существует! }
  • Строгое сравнение — когда необходимо подтвердить наличие свойства, не удовлетворяясь лишь его истинностью:
JS
Скопировать код
if (obj.key !== undefined) { // свойство точно существует, это факт }
  • Применение typeof — часто используемый способ проверки существования объекта в JavaScript, не вызывающий ошибку при неопределённой переменной:
JS
Скопировать код
if (typeof maybeObject !== "undefined") { // существует ли объект или это иллюзия? }
Кинга Идем в IT: пошаговый план для смены профессии

Тонкости проверки существования в JavaScript

Таинственные свойства typeof

В мире JavaScript оператор typeof является надёжной проверкой присутствия объекта:

JS
Скопировать код
if (typeof maybeObject !== "undefined") { // похоже, объект действительно существует... }

Эта проверка защищает от встречи с ReferenceError, если переменная maybeObject не определена.

Универсальность всего

Переходя к глобальным объектам, при их поиске рекомендуется проверить объект window, если мы работаем с браузерным API:

JS
Скопировать код
if ('maybeObject' in window) {
  // Глобальный объект присутствует, или это мировая загадка? }

Столкновение с Null

Остерегайтесь: проверка на undefined может быть ловушкой. Значение null может создать иллюзию существования объекта:

JS
Скопировать код
if (maybeObject != null) {
  // Ни undefined, ни null, верите ли вы в чудеса? }

Имейте в виду, null — это место в JavaScript, подобное Бермудскому треугольнику, где теряются значения.

Углубляемся — до сути

Проверка на существование — это только начало. Нам нужен полностью функциональный объект, а не просто оболочка. Если объект существует, полезно удостовериться, что и его ключевые методы или свойства также присутствуют:

JS
Скопировать код
if (maybeObject && typeof maybeObject.someMethod === "function") {
  // Объект на месте и к вашим услугам, готов к бою! }

Убедитесь: функциональность важнее простого существования. Это правило актуально как для JavaScript, так и для жизни в общем.

Визуализация

Давайте представим объект в виде дома 🏠, где свойства — это комнаты. В JavaScript дом может выглядеть так:

Markdown
Скопировать код
Дом = { "Кухня": 🍳, "Гостиная": 📺, "Спальня": 🛏️, "Ванная": 🛀 }

Как удостовериться в наличии конкретной комнаты:

JS
Скопировать код
if ('Ванная' in Дом) {
  🚽 // Ванная комната есть, это факт! }
  • Чтобы избежать ловушку с null в подвале:
JS
Скопировать код
if (Дом['Подвал'] !== null) {
  // Подвал действительно существует, это не обман }
  • При выполнении глобальных проверок используйте объект window:
JS
Скопировать код
if ('Главная спальня' in window.Дом) {
  // Вот она, главная спальня на глобальном уровне! }

Полезные материалы

  1. Объекты и прототипы объектов – JavaScript | MDN — подробная информация о работе с объектами в JavaScript на MDN Web Docs.
  2. Как проверить наличие конкретного свойства у объекта в JavaScript? – Stack Overflow — обсуждение на Stack Overflow о проверке наличия свойств у объектов.
  3. Объекты – JavaScript.info — глубокое погружение в тему объектов в JavaScript.
  4. Спецификация языка ECMAScript® 2021 — исчерпывающий источник всех норм и основ JavaScript.
  5. GitHub – lodash/lodash: Современная утилитарная библиотека JavaScript — набор мощных утилит для работы с объектами в JavaScript.
  6. JSHint, инструмент для проверки качества кода на JavaScript — инструмент для создания безошибочного и качественного JavaScript кода.