Switch in JavaScript

by vitrumblog


偶然看到一篇讲GO语言中Select 和Switch的区别,觉得挺有趣,GO里Switch的用法也挺自由,一直以来以为javascript中Switch是用字符和数字来判断条件的,限制很多。

后经提醒,仔细看了一下规范 发现原来在javascript中也一样可以玩的飞起。

发现有下面的用法之前没有注意过:

1,判断变量为布尔值

var a = 100;
var b = NaN;
switch (true) {
  case isNaN(a) || isNaN(b):
    console.log('NaNNaN');
    break;
  case a === b:
    console.log(0);
    break;
  case a < b:
    console.log(-1);
    break;
  default:
    console.log(1);
}

这样在case中就可以写条件了。

2,多个条件符合的判断

如果多个条件,都走相同的逻辑,以前用笨办法复制代码,显然是可以优化的,由于Switch是用break作为一个逻辑块的结束,那么想实现类似:

case "afshin", "saeed", "larry": 

的方案,可以这么操作

switch (varName)
{
   case "afshin":
   case "saeed":
   case "larry": 
       alert('Hey');
       break;

   default: 
       alert('Default case');
}

文档中更有花哨到不行的实例

var foo = 1;
var output = 'Output: ';
switch (foo) {
  case 10:
    output += 'So ';
  case 1:
    output += 'What ';
    output += 'Is ';
  case 2:
    output += 'Your ';
  case 3:
    output += 'Name';
  case 4:
    output += '?';
    console.log(output);
    break;
  case 5:
    output += '!';
    console.log(output);
    break;
  default:
    console.log('Please pick a number from 0 to 6!');
}

Output from this example:

Value Log text
foo is NaN or not 1, 2, 3, 4, 5 or 10 Please pick a number from 0 to 6!
10 Output: So What Is Your Name?
1 Output: What Is Your Name?
2 Output: Your Name?
3 Output: Name?
4 Output: ?
5 Output: !

6到飞起啊~