你不知道的JS switch

241 阅读1分钟

switch 可以当做是 if..else if..else.. 的简化版本

   switch (5) {
      case 2:
        console.log('2')
        break;
      case 3:
        console.log('3')
        break;
      default:
        console.log('啊啊啊')
    };         // 啊啊啊

1.switch 中存在一些不太为人知的陷阱

通常 case 中的switch都是简单值,所以并没有问题,然而,有时候会需要通过强制类型转换进行相等比较(==),这时候就需要一些特殊处理。

 var a = '42';
    switch (true) {
      case a == 10:
        console.log('10')
        break;
      case a == 42:
        console.log('10')
        break;
      default:
        // 永远执行不到这里
    }         //  10

2.除简单值之外, case 中还可以出现各种表达式,他会将表达式的结果和true进行比较,因为a==42 的结果是true,所以条件成立。

3.尽管可以使用==,但 switch 中true和true 之间仍是严格相等比较,即如果 case 表达式的结果为真值,但不是严格意义上的true,则条件不成立,所以在这利用 || 和 && 等逻辑运算符很容易掉进坑里.

   var a = 'hello world';
    var b = 10;
    switch (true) {
      case (a || b == 10):
        console.log('555') // 永远执行不到这里
        break;
      default:
        console.log('Oops')
    }   // Oops

因为 (a || b == 10) 的结果是 'hello world' 而非 true,所以严格相等比较不成立,此时可以通过强制表达式返回 true 或 false,如 case !!(a || b == 10):