Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.10.2012, 10:23
Новичок на форуме
Отправить личное сообщение для mrWong Посмотреть профиль Найти все сообщения от mrWong
 
Регистрация: 01.02.2010
Сообщений: 5

Правильная проверка на существование стандартного объекта
Возник вопрос, как правильно проверять на существование стандартного объекта в браузере.
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.

Кто чем пользуется?

Последний раз редактировалось mrWong, 06.10.2012 в 07:36.
Ответить с цитированием
  #2 (permalink)  
Старый 04.10.2012, 23:02
Профессор
Отправить личное сообщение для Hoshinokoe Посмотреть профиль Найти все сообщения от Hoshinokoe
 
Регистрация: 08.01.2012
Сообщений: 253

Мне нравится более простой вариант:
if(window.console && console.log) console.log('test');
Ответить с цитированием
  #3 (permalink)  
Старый 05.10.2012, 10:47
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

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

Последний раз редактировалось Maxmaxmахimus, 05.10.2012 в 11:20.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проверка HTML элемента на существование MCTrane Общие вопросы Javascript 10 26.02.2014 20:51
Проверка на существование файла в IE с помощью readyState Kotakota Events/DOM/Window 13 29.09.2012 03:25
Проверка картинки на существование и на ее полную загрузку syegorius Events/DOM/Window 20 08.06.2011 12:59
Можно ли получить имя экземпляра объекта внутри самого объекта? Ichigeki Общие вопросы Javascript 9 14.11.2008 19:00
проверка элемента на существование Дмитрий С. Общие вопросы Javascript 2 13.11.2008 12:05