Уточненное определение типа объекта - 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, время: 04:04. |