答案 0 :(得分:8)
您可以使用typeof运算符:
var x = 1;
console.log(typeof x);
x = 'asdf';
console.log(typeof x);
打印:
number
string
答案 1 :(得分:3)
这是一个支持typeof
的功能,但在需要时默认为Object.prototype.toString
(速度慢得多)。
这样,您可以从new String('x')
或null
或/regex/
(在Chrome中)获得一些意外值。
var type = (function () {
var toString = Object.prototype.toString,
typeof_res = {
'undefined': 'undefined',
'string': 'string',
'number': 'number',
'boolean': 'boolean',
'function': 'function'
},
tostring_res = {
'[object Array]': 'array',
'[object Arguments]': 'arguments',
'[object Function]': 'function',
'[object RegExp]': 'regexp',
'[object Date]': 'date',
'[object Null]': 'null',
'[object Error]': 'error',
'[object Math]': 'math',
'[object JSON]': 'json',
'[object Number]': 'number',
'[object String]': 'string',
'[object Boolean]': 'boolean',
'[object Undefined]': 'undefined'
};
return function type(x) {
var the_type = typeof_res[typeof x];
return the_type && (the_type !== 'function' || (x.apply && x.call)) ?
the_type :
tostring_res[toString.call(x)] || (x ? 'object' : 'null');
};
})();
type( new String('test') ); // string
type( function(){} ); // function
type( null ); // null
type( /regex/ ); // regexp
编辑: 我刚刚完成了重写,并删除了该功能的关键部分。固定的。
或者更紧凑的版本:
var type = (function() {
var i, lc, toString = Object.prototype.toString,
typeof_res = {},
tostring_res = {},
types = 'Undefined,String,Number,Boolean,Function,Array,Arguments,RegExp,Date,Null,Error,Math,JSON'.split(',');
for (i = 0; i < types.length; i++) {
lc = types[i].toLowerCase();
if (i < 5) typeof_res[lc] = lc;
tostring_res['[object ' + types[i] + ']'] = lc;
}
return function type(x) {
var the_type = typeof_res[typeof x];
return the_type && (the_type !== 'function' || (x.apply && x.call)) ?
the_type :
tostring_res[toString.call(x)] || (x ? 'object' : 'null');
};
})();
答案 2 :(得分:2)
typeof
可以解决大多数的问题。但是,如果您的Number
或String
不是原语,则会返回'object'
。一般来说,这不是你想要的。
var str = new String('Hello');
typeof str; // 'object'
typeof
还说null
是'object'
,而在WebKit中,正则表达式是'function'
。我认为typeof
的主要优点是检查变量而不抛出ReferenceError
。
您也可以检查变量的constructor
属性,或使用variable instanceof String
。但是,在使用交叉window
代码时,这两种方法都无法在多个window
环境中使用。
确定类型的其他保证方式是......
var getType = function(variable) {
return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase();
}
答案 3 :(得分:0)
使用typeof
函数
var s = "string",
n = 1; // number
if(typeof s == 'string'){
//do stuff for string
}
if(typeof n == 'number'){
//do stuff for number
}
答案 4 :(得分:0)
其他人已经讨论了typeof
运算符和Object.prototype.toString
的使用,但是如果你想专门测试一个int而不是任何类型的数字那么你可以做一些变化:
function isInt(n) {
return typeof n === "number" && n === Math.floor(n);
}
(如果需要,请插入所有Object.prototype.toString
内容。)