如何检查开关主题是否为对象?

时间:2014-06-16 20:36:04

标签: javascript jquery

我的Ajax响应可以是json objectbool或各种string values

我可以检查它是否是switch语句中的对象吗?

$.post('url',{some:'data'},function(response){
   switch (response){
   case true:
     console.log('is true');
     break;
   case false:
     console.log('is false');
     break;
   case 'success':
     console.log('is success');
     break;
   case typeof this === 'object' // thought I'd try this but it didn't work.
     console.log('is object');
     break;
   }
});

2 个答案:

答案 0 :(得分:5)

switch在参数和case表达式之间执行相等比较。因此case typeof this === 'object'会计算typeof this === 'object'的值,truefalse取决于this是什么(window你的回调),并将其与response进行比较。它不会测试response的类型。如果要对response的类型执行切换,请将其用作参数。

尝试:

switch (typeof response) {
case 'boolean':
    if (response) {
        console.log('is true');
    } else {
        console.log('is false');
    }
    break;
case 'string':
    if (response == 'success') {
        console.log('is success');
    } else {
        // do something
    }
    break;
case 'object':
    console.log('is object');
    break;
}

更一般地说,当您想对相同的值进行一系列相等测试时,应使用switch。你不能在同一个switch中混合相等和类型测试;您需要使用switch作为一个,if作为另一个。{/ p>

答案 1 :(得分:0)

有一个默认案例:

default : 
     if(typeof response === 'object'){ // thought I'd try this but it didn't work.
     console.log('is object');
     }
     break;