Правильная проверка на существование стандартного объекта
Возник вопрос, как правильно проверять на существование стандартного объекта в браузере.
if(window.console) console.log('Я живой!'); if (typeof console != "undefined") console.log('Я живой!'); if('console' in window) console.log('Я живой!'); if(window.hasOwnProperty('console')) console.log('Я живой!'); Еще есть вариант, оборачивать в try...catch. Кто чем пользуется? |
Мне нравится более простой вариант:
if(window.console && console.log) console.log('test'); |
2 строчка че за херня?
а вообще Hoshinokoe правильный метод показал. потому что так obj.key мы делаем обращение к обьекту и спрашиваем у него key и он сам решает что ответить. А остальными способами мы не спрашивая обьект проверяем его внутреннее состояние, что иногда противоречит сути обьектов (инкапсуляции) КЭП. Иными словами получать знчаение которое дежит по ключу надо именно через аксессоры. а потом уже првоерять удовлетворяет тебя это значение или нет. Но я написал которая определяет можно ли достучаться до конца цепочки и получить значение отличное от (неопределенного) undefined , функция возвращает true или false. function has( context, patch ) { var keys = patch.split( '.' ); for ( var i = 0; i < keys.length; i++ ) { try { var value = context[keys[i]]; } catch ( e ) { return false } if ( value !== undefined )context = value; else return false; } return true; } а вот монада get которая возвращает то что на конце цепочки, если не может до туда достучаться возвращает undefined function get( context, patch ) { var keys = patch.split( '.' ); for ( var i = 0; i < keys.length; i++ ) { try { var value = context[keys[i]]; } catch ( e ) { return } if ( value !== undefined )context = value; else return; } return context; } get var obj = {a:{b:{c:{d:11}}}}; var value = get( obj, 'a.b.c.d' ); alert( value ); // 11 |
Часовой пояс GMT +3, время: 00:55. |