Скажем, у меня есть объект JavaScript, например:
var obj = {};
obj.computers = {};
obj.computers.favorite = "Commodore 64";
obj.computers.popular = "Apple";
Теперь я могу легко проверить значение null, например:
if(obj != 'undefined' && obj != null) {
if(obj.computers != 'undefined' && obj.computers != null)) {
.....
Как видите, если мне нужно увидеть, установлен ли obj.computers.favorite
, я действительно должен вложить туда некоторую условную логику. Некоторые из наших объектов имеют глубину 3, 4, 5 уровней.
Вот что я хотел бы делать:
var fav = obj.computers.favorite || 'Unknown';
Но я понимаю, что мне нужно было бы обернуть это каким-то методом. Что-то типа:
var fav = getValueOrDefault(obj.computers.favorite, 'Unknown');
Предложения приветствуются.
Спасибо
ИЗМЕНИТЬ
Моя проверка на «undefined» на самом деле не то, что я использую. Это просто вышло из головы, когда я задавал вопрос. ржу не могу
Но мне было интересно, могу ли я просто обернуть try / catch и выбросить по умолчанию, если исключение?
function(obj, default) {
try {
if(obj != null) {
return obj;
} else {
return default;
}
} catch(ex) {
return default;
}
}
Также спасибо Shusi за указание на повторяющиеся vars.
obj != 'undefined' && obj != null
неверно, так как для получения строкового значения'undefined'
вам понадобится typeof. Это обычная ошибка. Но в любом случае это излишне многословно. Просто сделайтеobj != null
, и он одновременно проверит наundefined
. - person I Hate Lazy   schedule 02.10.2012getValueOrDefault(obj.computers.favorite, 'Unknown')
вызовет исключение, еслиobj.computers
не определены. Вам нужно будет обернуть его строкой и выполнить инкрементный синтаксический анализ объекта. - person saml   schedule 02.10.2012