Javascript 是否有检查变量类型的快捷语法?

Javascript 是否有检查变量类型的快捷语法?,javascript,Javascript,在JavaScript中,我如何说: if (typeof obj === 'number' || typeof obj === 'boolean' || typeof obj === 'undefined' || typeof obj === 'string') { 换句话说,是否存在某种: if (typeof obj in('number','boolean','undefined','string')) { 您可以使用开关: switch (typeo

在JavaScript中,我如何说:

if (typeof obj === 'number' 
    || typeof obj === 'boolean' 
    ||  typeof obj === 'undefined' 
    || typeof obj === 'string') {
换句话说,是否存在某种:

if (typeof obj in('number','boolean','undefined','string')) {

您可以使用
开关

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
}

您可以使用
开关

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
}

你可以用这样的方法来近似

var acceptableTypes = {'boolean':true,'string':true,'undefined':true,'number':true};

if ( acceptableTypes[typeof obj] ){
  // whatever
}
还是更冗长

if ( typeof obj in acceptableTypes){
  // whatever
}

你可以用这样的方法来近似

var acceptableTypes = {'boolean':true,'string':true,'undefined':true,'number':true};

if ( acceptableTypes[typeof obj] ){
  // whatever
}
还是更冗长

if ( typeof obj in acceptableTypes){
  // whatever
}
typeof(obj)
只返回一个字符串,因此您可以在检查字符串是否在任何字符串集中时执行以下操作:

if (typeof(obj) in {'number':'', 'boolean':'', 'undefined':'', 'string':''})
{
  ...
}
或者你可以把它做得更短。由于
typeof
可能返回的唯一“类型”是
number
string
boolean
对象
函数
未定义
,因此在这种特殊情况下,您可以只进行排除

if (!(typeof(obj) in {'function':'', 'object':''}))
{
  ...
}
typeof(obj)
只返回一个字符串,因此您可以在检查字符串是否在任何字符串集中时执行以下操作:

if (typeof(obj) in {'number':'', 'boolean':'', 'undefined':'', 'string':''})
{
  ...
}
或者你可以把它做得更短。由于
typeof
可能返回的唯一“类型”是
number
string
boolean
对象
函数
未定义
,因此在这种特殊情况下,您可以只进行排除

if (!(typeof(obj) in {'function':'', 'object':''}))
{
  ...
}

我喜欢在类似的情况下使用函数式编程。 因此,您可以使用使其更具可读性:

_.any(['number','boolean','undefined','string'], function(t) {
  return typeof(obj) === t; 
});

我喜欢在类似的情况下使用函数式编程。 因此,您可以使用使其更具可读性:

_.any(['number','boolean','undefined','string'], function(t) {
  return typeof(obj) === t; 
});

为工厂带来更多利润:

if ( ('object function string undefined').indexOf(typeof x) > -1) {
  // x is an object, function, string or undefined
}


你想用多少种方法剥这只猫的皮?

给工厂更多的好处:

if ( ('object function string undefined').indexOf(typeof x) > -1) {
  // x is an object, function, string or undefined
}


你想让这只猫有多少种去皮方法?

你想在第一句话的基础上有所改进吗?只是好奇——为什么你需要检查这么多类型的猫?我以前从来没有这样做过。你想改进第一条语句吗?只是好奇——为什么你需要检查这么多类型?我以前从来没有这样做过。Switch语句应该总是有一个默认块。是的,只是一个约定,可能更多的是为了与其他语言保持一致,并明确如果所有案例都失败会发生什么。我认为Crockford说不要使用switch语句,因为它要求在每个案例结束时都有一个中断。switch语句应该始终有一个默认块。是的,只是一个约定,可能更多的是为了与其他语言保持一致,并明确说明如果所有案例都失败了会发生什么。我认为Crockford说不要使用switch语句,因为它要求在每个案例的结尾都有一个中断。typeof是一个运算符,不需要分组运算符,因此
typeof obj
就足够了,而且更受欢迎。typeof是一个运算符,不需要分组运算符,因此obj的
typeof
就足够了,并且是首选的。请注意,它们还将匹配碰巧是四个类型名称中任何一个的子字符串的任何类型。请注意,它们还将匹配碰巧是四个类型名称中任何一个的子字符串的任何类型。