Уточненное определение типа объекта - typeOf
Может будет интересно, часто вижу кривые определения типа объекта, например Array определяется по наличию метода concat :lol:
Сделал для себя функцию 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 |
Цитата:
typeOf(window) В фоксе выдаёт "window", в хроме - "global", в ie8 - "object". Сколько браузеров - столько и мнений, однако.:D |
Цитата:
И конкретно для массивов во всех браузерах есть Array.isArray. |
?? зачем изобретать велосипед, когда он уже давно изобретен?
например можно дернуть у 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([]); |
ИМХО:
В JS почти всегда нужно проверять необходимые свойства у объектов. Если есть проверка типа то скрипт почти наверняка написан неправильно. |
Часовой пояс GMT +3, время: 01:28. |