Как насчет функции домашнего приготовления для определения переменной «тип»? Он также может определять тип пользовательских объектов:
function whatType(somevar){
return String(somevar.constructor)
.split(/\({1}/)[0]
.replace(/^\n/,'').substr(9);
}
var num = 43
,str = 'some string'
,obj = {}
,bool = false
,customObj = new (function SomeObj(){return true;})();
alert(whatType(num)); //=>Number
alert(whatType(str)); //=>String
alert(whatType(obj)); //=>Object
alert(whatType(bool)); //=>Boolean
alert(whatType(customObj)); //=>SomeObj
На основании свойства конструктора переменных вы также можете сделать:
function isType(variable,type){
if ((typeof variable).match(/undefined|null/i) ||
(type === Number && isNaN(variable)) ){
return variable
}
return variable.constructor === type;
}
/**
* note: if 'variable' is null, undefined or NaN, isType returns
* the variable (so: null, undefined or NaN)
*/
alert(isType(num,Number); //=>true
Теперь alert(isType(customObj,SomeObj)
возвращает false. Но если SomeObj является нормальной функцией конструктора, она возвращает true.
function SomeObj(){return true};
var customObj = new SomeObj;
alert(isType(customObj,SomeObj); //=>true