Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   как корректно обработать ситуацию с отсутствующем свойством объекта? (https://javascript.ru/forum/misc/12073-kak-korrektno-obrabotat-situaciyu-s-otsutstvuyushhem-svojjstvom-obekta.html)

miha-ha 29.09.2010 13:25

как корректно обработать ситуацию с отсутствующем свойством объекта?
 
как корректно обработать ситуацию с отсутствующим свойством объекта?
var Obj = {};
alert(Obj.nonset); //здесь ничего страшного просто undefined
alert(Obj.nonset.name); //а тут ошибка в консоли

У меня есть объекты, которые в разное время имеют разные свойства
И хочеться логировать попытки доступа к несуществующим в данный момент свойствам без ошибок в консоли

e1f 29.09.2010 13:56

При обращение к свойству несуществующего поля (равно как и поля, значение которого будет null или undefined) Вы получаете runtime-error вида ReferenceError. Как логировать? Разве что обернуть весь код в try/catch, и отслеживать в catch тип ошибки.
Но оно Вам надо? :)
можно просто писать что-то вроде
Obj.nonset && alert(Obj.nonset.name);

exec 29.09.2010 14:10

Цитата:

Вы получаете runtime-error вида ReferenceError
Не совсем:

<script type="text/javascript">
	try {
		window.ololo.ololo;
	} catch ( e ) {
		alert(e.name);
	}
</script>

e1f 29.09.2010 15:00

Да, с типом я ошибся. ReferenceError будет в ситуации вида
try { 
    I_Do_Not_Exist; 
} catch(e) { 
    alert(e.name) 
}

miha-ha 29.09.2010 17:53

уточню немного:
объектов очень много и проверки на доступность надоедают :(
Использую абстрактные классы. Возможно ли такое:
AbstractClass = Ext.extend(Object, {
  constructor: function(..){
    this.curItem = {value: 1};
  },
  get: function(itemName){
     //сдесь чудо код
  }
});
var c = new AbstractClass();
alert(c.get('curItem').value); //здесь 1
alert(c.get('curItem2').value2); //здесь хотелось бы undefined


возможно такое?

e1f 29.09.2010 18:17

Ну, вместо чудо-кода напишите говнокод вида
get: function(itemName){
    return this.hasOwnProperty(itemName) ? this.itemName : {};
}


Но зачем?

miha-ha 29.09.2010 18:49

Цитата:

Сообщение от e1f (Сообщение 72384)
Ну, вместо чудо-кода напишите говнокод вида
get: function(itemName){
    return this.hasOwnProperty(itemName) ? this.itemName : {};
}


Но зачем?

У меня есть объекты, которые в разное время имеют разные свойства
И хочеться логировать попытки доступа к несуществующим в данный момент свойствам без ошибок в консоли

Возможно это именно то что и нужно было...
Но стоит ли овчинка выделки пока не могу понять

e1f 29.09.2010 18:57

Такое ощущение, что не стоит.


Часовой пояс GMT +3, время: 06:45.