Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.08.2014, 19:39
_0_ _0_ вне форума
Аспирант
Отправить личное сообщение для _0_ Посмотреть профиль Найти все сообщения от _0_
 
Регистрация: 10.05.2013
Сообщений: 56

Уточненное определение типа объекта - typeOf
Может будет интересно, часто вижу кривые определения типа объекта, например Array определяется по наличию метода concat

Сделал для себя функцию typeOf - надстройку над стандартной

function typeOf( arg ){
		var t = typeof(arg);
		if( arg === null ){
			return 'null';
		}else if( t == 'object' ){
			t = Object.prototype.toString.call( arg )
			return t.substr( 8, t.length - 9 ).toLowerCase();
		}else{
			return t;
		}
	}

	// ну и проверочка

	function log( arg ){
		console.log( typeOf( arg ),' > ', arg );
	}
	
	log()
	log({})
	log([])
	log('ggg')
	log(888)
	log( /\g\/i/ )
	log(null)
	log( function(){} );


Скопируй в консоль и нажми ENTER
Ответить с цитированием
  #2 (permalink)  
Старый 31.08.2014, 20:14
Профессор
Отправить личное сообщение для Sweet Посмотреть профиль Найти все сообщения от Sweet
 
Регистрация: 16.03.2010
Сообщений: 1,618

Сообщение от _0_
часто вижу кривые определения типа объекта... Сделал для себя функцию typeOf
Тоже не особо прямая функция:
typeOf(window)

В фоксе выдаёт "window", в хроме - "global", в ie8 - "object". Сколько браузеров - столько и мнений, однако.
Ответить с цитированием
  #3 (permalink)  
Старый 31.08.2014, 21:29
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от _0_
часто вижу кривые определения типа объекта, например Array определяется по наличию метода concat
Duck typing? Не, не слышал!

И конкретно для массивов во всех браузерах есть Array.isArray.
Ответить с цитированием
  #4 (permalink)  
Старый 01.09.2014, 15:59
Профессор
Отправить личное сообщение для skrudjmakdak Посмотреть профиль Найти все сообщения от skrudjmakdak
 
Регистрация: 27.04.2012
Сообщений: 1,410

?? зачем изобретать велосипед, когда он уже давно изобретен?
например можно дернуть у ext эту функцию:

function (value) {
            var type,
                typeToString;
            
            if (value === null) {
                return 'null';
            }

            type = typeof value;

            if (type === 'undefined' || type === 'string' || type === 'number' || type === 'boolean') {
                return type;
            }

            typeToString = toString.call(value);

            switch(typeToString) {
                case '[object Array]':
                    return 'array';
                case '[object Date]':
                    return 'date';
                case '[object Boolean]':
                    return 'boolean';
                case '[object Number]':
                    return 'number';
                case '[object RegExp]':
                    return 'regexp';
            }

            if (type === 'function') {
                return 'function';
            }

            if (type === 'object') {
                if (value.nodeType !== undefined) {
                    if (value.nodeType === 3) {
                        return (nonWhitespaceRe).test(value.nodeValue) ? 'textnode' : 'whitespace';
                    }
                    else {
                        return 'element';
                    }
                }

                return 'object';
            }

        }


ах да, еще она есть у jquery: jQuery.type([]);

Последний раз редактировалось skrudjmakdak, 01.09.2014 в 16:03.
Ответить с цитированием
  #5 (permalink)  
Старый 01.09.2014, 17:12
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

ИМХО:
В JS почти всегда нужно проверять необходимые свойства у объектов.
Если есть проверка типа то скрипт почти наверняка написан неправильно.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
background resize IceDvl jQuery 4 25.04.2014 17:54
Определение DOM объекта leoHex Events/DOM/Window 9 01.09.2011 20:29
Возможна ли смена типа созданного объекта в Javascript? phprus Общие вопросы Javascript 9 04.07.2009 02:41
Подключение событий в onload и определение их типа anstm Events/DOM/Window 2 07.04.2009 15:20
Не просто определение типа браузера... Driver86 Общие вопросы Javascript 6 08.04.2008 21:35