在JavaScript中,我该怎么说:
if (typeof obj === 'number'
|| typeof obj === 'boolean'
|| typeof obj === 'undefined'
|| typeof obj === 'string') {
换句话说,是否有某种形式:
if (typeof obj in('number','boolean','undefined','string')) {
答案 0 :(得分:6)
您可以使用switch
:
switch (typeof obj) {
case 'number':
case 'boolean':
case 'undefined':
case 'string':
// You get here for any of the four types
break;
}
在Javascript 1.6中:
if (['number','boolean','undefined','string'].indexOf(typeof obj) !== -1) {
// You get here for any of the four types
}
答案 1 :(得分:4)
你可以用
之类的东西来近似它var acceptableTypes = {'boolean':true,'string':true,'undefined':true,'number':true};
if ( acceptableTypes[typeof obj] ){
// whatever
}
或更详细的
if ( typeof obj in acceptableTypes){
// whatever
}
答案 2 :(得分:3)
是的。 typeof(obj)
只返回一个字符串,因此您可以像检查字符串是否在任何字符串集中那样简单地执行:
if (typeof(obj) in {'number':'', 'boolean':'', 'undefined':'', 'string':''})
{
...
}
或者你可以让它更短。由于typeof
可能返回的唯一“类型”是number
,string
,boolean
object
,function
和undefined
,在这种特殊情况下,你可以改为排除。
if (!(typeof(obj) in {'function':'', 'object':''}))
{
...
}
答案 3 :(得分:2)
为工厂提供更多支持:
if ( ('object function string undefined').indexOf(typeof x) > -1) {
// x is an object, function, string or undefined
}
或
if ( (typeof x).match(/object|function|string|undefined/)) {
// x is an object, function, string or undefined
}
您希望这只猫皮肤有多少种方式?
答案 4 :(得分:1)
我喜欢在类似情况下使用函数式编程。 因此,您可以使用underscore.js使其更具可读性:
_.any(['number','boolean','undefined','string'], function(t) {
return typeof(obj) === t;
});