Как узнать определено ли свойство в объекте?

  • Автор темы Автор темы Vadim_PDF
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

Vadim_PDF

Топикстартер
15 лет на форуме
Сообщения
1 648
Реакции
237
undefinded.png

Есть такой код. Мы получаем все стили параграфов, затем берем первый (который No Paragraph Styles) и запрашиваем на чем он базируется. Так как он корневой - и ни начем не базируется - то свойство объекта существует (что показывает первая проверка), но не определено. Хотим проверить тип - typeof выдает 'undefinded', но после этого вываливается ошибка:
uu.png

и скрипт прекращает выполнятся дальше (в примере продолжения кода нет, но представим что он есть)
В общем, любое обращение к этой переменной вызывает ошибку.

В чем вопрос - я обошел такое поведение поместив в try... catch... но вопрос как обойтись без отлова этих ошибок.

Насколько я понимаю - где-то в прототипе этого объекта (а может в самом движке) прописано функцией - если обращаются к этой переменной - то выпадать с ошибкой Invalid request on a root style.
Может я ошибаюсь, и это стандартное поведение js.

В общем как в таких случаях (да и в браузере тоже) проверить существование свойства и определено ли оно? без оборачивания в исключения?

P.S. Кстати - а что показывает отладчик - почему значение этой неопределенной переменной выглядит как строка "Invalid request on a root style."?
 
А что говорит alert(z[0].basedOn)?
 
alert(z[0].basedOn) - говорит что такого свойства нет (описочка? "z" у нас уже не массив а объект)
alert(z.basedOn) - сразу вываливается с ошибкой 516 Invalid request on a root style


P.S. Только что проверил - в стандартном js v8 - Chrome - такой вариант прокатывает без проблем - http://jsbin.com/qofuvedu/1/edit
 
Последнее редактирование:
Гм, а просто проверять что это No paragraph styles? 'hmmm'
 
Как бы не вопрос.. но в Indesign очень много переменных (если точнее свойств объектов) , которые уже созданы, но не определены, просто дебагер их скрывает, если не поставлена галочка в контекстном меню панели data browser
и натыкаться каждый раз не охота на такие моменты, тем более что непонятно что это - в прототипе функция - "если запрашивают эту переменную - выбрасывай исключение и прерывай работу"? Если да - то как до неё дорыться? Рефлексией?
 
Тут проблема в оригинальной кривой реализации адобовской явы. Лично я тоже борюсь через try-catch
 
Можно просто начинать цикл с 1.
0-й -- всегда [No paragraph styles] и у него нет базового стиля,
потому что это отсутствие стиля.
Если все остальные проверять на валидность
Код:
myPStyle.basedOn.isValid
то undefined будет означать, что базовый стиль [No paragraph styles].
 
Статус
Закрыто для дальнейших ответов.