Javascript проверить наличие объекта

Часто при работе с объектом полезно проверить, что содержится в этом объекте, есть ли в нём свойство с заданным именем и ка­кое это свойство. Данную процедуру можно проделать с помощью оператора in и с помощью методов hasOwnProperty() и propertyIsEnumerable() или просто обратившись к свойству.

Оператор in

Оператор in принимает имя свойства (в виде строки) в левом операнде и объект в правом операнде. Оператор in возвращает true , если свойство содержится в указанном объекте или в его цепочке прототипов:

На заметку: Значение свойства в левом операнде оператора in заключается в двойные кавычки – то есть на самом деле указывается текстовая строка с названием свойства. Так же мы поступаем, когда к свойству объекта обращаемся с использованием квадратных скобок, то есть при использовании команды вида объект["свойство"].

Если вы удалили свойство при помощи оператора delete, то оператор in возвратит false для этого свойства:

Если вы добавите в объект свойство со значением undefined , то для этого свойства оператор in вернет значение true :

Метод hasOwnProperty()

Метод hasOwnProperty() объекта проверяет, имеет ли объект собственное свойство с указанным именем. В отличие от оператора in, этот метод не проверяет существование свойств в цепочке прототипов объекта:

Метод propertyIsEnumerable()

Метод propertyIsEnumerable() возвращает логическое значение true , если указанное свойство является перечисляемым. Метод propertyIsEnumerable() возвращает значение false , если объект не имеет свойства с указанным именем или если указанное свойство не является перечислимым. Как правило, предопределенные свойства не являются перечислимыми, но свойства, определенные пользователем, всегда перечислимы.
Метод propertyIsEnumerable() не учитывает объекты в цепи прототипов:

Как проверить существование объекта в JavaScript?

но это вызывает ошибку:

Ошибки:

16 ответов:

Вы можете безопасно использовать typeof оператор для неопределенных переменных.

если ему было присвоено какое-либо значение, включая null, typeof вернет что-то другое, кроме undefined. typeof всегда возвращает строку.

здесь много полуправды, поэтому я подумал, что проясняю некоторые вещи.

на самом деле вы не можете точно сказать, существует ли переменная (если вы не хотите обернуть каждую вторую строку в блок try-catch).

причина в том, что Javascript имеет это пресловутое значение undefined что поразительно, не означает, что переменная не определена, или не существует undefined !== not defined

Итак, как переменная, которая существует, так и другая, которая не может сообщить вам undefined тип.

что касается заблуждения @Kevin, null == undefined . Это связано с принуждением типа, и это главная причина, по которой Крокфорд продолжает говорить всем, кто не уверен в этом, всегда использовать строгий оператор равенства === для проверки возможных ложных значений. null !== undefined дает вам то, что вы могли бы ожидать. Обратите внимание, что foo != null может быть эффективным способом проверить, не является ли переменная ни undefined , ни null . Конечно, вы можете быть явным, потому что это может помочь удобочитаемости.

если вы ограничиваете вопрос, чтобы проверить, существует ли объект, typeof o == "object" может быть хорошей идеей, за исключением тех случаев, когда вы не рассматриваете объекты массивов, так как это также будет указано как тип object что может оставить вас немного запутался. Не говоря уже о том, что typeof null также даст вам object это просто неправильно.

первичная область, где вы действительно должны быть осторожны typeof , undefined , null , unknown и другие тайны размещения объектов. Им нельзя доверять. Они вольны делать почти любую грязную вещь, которую они хотят. Поэтому будьте осторожны с ними, проверьте функциональность, если можете, потому что это единственный безопасный способ использовать функцию, которая может даже не существовать.

Как проверить существует ли глобальный объект? Есть код:

Надо узнать, существует ли объект. Как я понял, в итоге должно получиться нечто подобное:

Есть ли разница между

Можно ли просто использовать блок try/catch ?

4 ответа 4

Есть только 3 сравнения с null и undefined дающие TRUE :

Любые другие комбинации — FALSE

if (GlobalObj != undefined) <. >GlobalObj = ^[ undefined | null ]

if (typeof GlobalObj != ‘undefined’) <. >GlobalObj = ^[ undefined ]

Можете использовать проверку на undefined:

В определенных случаях есть смысл жестко указать на то что ищем именно глобальную переменную: window.GlobalObj И в данном случае проверка может быть: if(!window.GlobalObj) <. >(если быть уверенным точно что window.GlobalObj !== false )

существует 🙂 Если typeof GlobalObj == ‘undefined’ , то в первом случае выбросится ошибка: ReferenceError: GlobalObj is not defined

Всё ещё ищете ответ? Посмотрите другие вопросы с метками javascript или задайте свой вопрос.

Связанные

Похожие

Для подписки на ленту скопируйте и вставьте эту ссылку в вашу программу для чтения RSS.

дизайн сайта / логотип © 2020 Stack Exchange Inc; пользовательское содержимое попадает под действие лицензии cc by-sa 4.0 с указанием ссылки на источник. rev 2020.1.14.35771


[an error occurred while processing the directive]
Карта сайта