Как программно получить список свойств объекта? (а еще бы и методов)

Статус
Закрыто для дальнейших ответов.

teatral

Участник
Топикстартер
Сообщения
350
Реакции
365
Хочу, чтобы программа могла перебрать свойства объекта и искала в них определенные значения. Подскажите, как можно узнать список этих свойств?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Теоретически стандартным циклом for val in obj, во всяком случае, с акробатом такой номер проходит.
 
  • Спасибо
Реакции: teatral

SlavaBuck

Участник
Сообщения
75
Реакции
30
_MBK_ Прав, этот номер проходит не только с акробатом, он проходит со всем. Очевидный вариант использовать цикл:
Код:
for (var prop in obj) {
    if (obj[prop] === val) { /* делаем что-нибудь */ }
};
Здесь важно обращать внимание две вещи: на оператор сравнения — надёжнее использовать строгое "===" сравнение; и на особенности работы цикла for (var prop in obj).
Дело в том, что такая форма цикла обходит не только собственные свойства объекта obj но и все прочие, которые им могут быть унаследованы от прототипов родительских объектов. Чтобы этого избежать, есть ещё одна устоявшаяся форма этого же цикла:
Код:
for (var prop in obj) if (obj.hasOwnProperty(prop)) {
    if (obj[prop] === val) { /* делаем что-нибудь */ }
};
Предварительная проверка obj.hasOwnProperty(prop) обеспечит работу цикла только для собственных свойств объекта и значительно сократит время обхода его свойств.
 
  • Спасибо
Реакции: teatral и _MBK_

teatral

Участник
Топикстартер
Сообщения
350
Реакции
365
Спасибо!
А для VB (VBA) что-то подобное есть ?
 

_MBK_

Пикирующий бомбардировщик
15 лет на форуме
Сообщения
33 138
Реакции
10 835
Думаю, что нет, синтаксические особенности языка.
 
Статус
Закрыто для дальнейших ответов.