0

value変数の がobjectusingであるかどうかを判断する方法はswitch?

var alice = condition ? true : {};
switch(alice){
    case true:      break;
    case undefined: break;
    // Is there something like:
    case object:    break;
}

私は現在、上記の問題を追加のifステートメントで解決しています(既存のswitchものに加えて、すでに非常に大きく、 や のような値を処理できますundefinedtrue。したがって、既存の のみを使用してオブジェクトを検出する方法があるかどうか疑問に思っていましたswitch(alice)

4

4 に答える 4

2

別のオプションを次に示します。

var alice = condition ? true : {};

switch(true){
   case alice === true:      break;
   case alice === undefined: break;
   case alice instanceof Object:    break;
}
于 2013-10-31T02:06:01.230 に答える
2

この方法は不可能です。ただし、変数の型を確認すると、やろうとしていることを達成するのに役立つ場合があります。

var alice = condition ? true : {};
switch (typeof(alice)) {
    case 'boolean': break; // if it's true or false
    case 'undefined': break;
    case 'object': break; // {}, [], {"a": "b"}
}

object空でないオブジェクトまたは配列もある場合にもスローされることに注意してください。

于 2013-10-31T01:52:24.503 に答える
2

typeof次の演算子を使用できます。

switch (typeof alice) {
 // ...
}

ただし、「true」はtypeof型ではなくブール値であるため、「true」は表示される値ではないことに注意してください。

したがって、それも見つけなければならない場合は、次のようにすることができます。

switch (typeof alice) {
  case 'object' : 
    // is an object, do something
    break;
  case 'boolean' :
    if (alice) {
      // is true, do something
    }
    break;
  case 'undefined' :
    // is undefined, do something
    break;
}
于 2013-10-31T01:52:50.343 に答える
0

この男はどうですか:

switch(typeof x)
{ 
  case 'object': alert("object"); break; 
  default: alert("not object");
}
于 2013-10-31T01:52:28.717 に答える