У нас есть объект (на который указывает data
), и мы хотим получить значение вложенного свойства.В идеале мы хотели бы сделать это так:
value = data.category3.section2.article4.title;
Мы не можем сделать это так, потому что в приведенной выше строке выдается ошибка ссылки, если какой-либо из промежуточных объектов (category3
, section2
,или article4
) не определены (в соответствующих позициях) внутри объекта data
.
Теперь, чтобы аннулировать любые потенциальные ссылочные ошибки, которые могут быть выброшены, мы можем просто поместить указанную выше строку внутри оператора try-catch
:
try {
value = data.category3.section2.article4.title;
} catch (err ) {}
Это работает!Однако я не уверен, что полагаться на try-catch
подобным образом - хорошая практика.Альтернативным решением было бы вручную перейти к желаемому значению свойства.Я написал компактную служебную функцию, которая выполняет это:
function get( val, names ) {
names = names.split( '.' );
while ( val && names.length ) { val = val[ names.shift() ]; }
return val;
}
Теперь мы можем получить значение свойства примерно так:
value = get( data, 'category3.section2.article4.title' );
Итак, мой вопрос:
Является ли подход try-catch
верным решением? Или есть веские причины, по которым его следует избегать?
Кстати, подход try-catch
сильно смещен в этой теме: Какой самый простой способ проверить существование свойства объекта с глубоким вложением в JavaScript?