【问题标题】:Why is Switch/Case syntax so different from the rest of JavaScript?为什么 Switch/Case 语法与 JavaScript 的其他部分如此不同?
【发布时间】:2020-05-14 00:51:49
【问题描述】:

希望这不是太哲学化,但它有助于帮助我理解 Javascript 及其约定。

为什么 Switch/Case 语法看起来与 JavaScript 的其他部分如此不同?

具体来说,我说的是冒号、缩进和break 关键字的使用。

其他地方也有吗?

它确实看起来很像 python。

当您使用使用冒号来定义类型的 TypeScript 时,它也会变得更加混乱。

而不是这个:

switch(foo){

  case 'bar':
    //do something
    break;

  case 'bizz':
    //do something
    break;

  default:
    //do something else
    break;
}

我觉得应该这样写:

switch(foo){
  case('bar'){
    //do something
  }

  case('bizz'){
    //do something
  }
  default{                 //or even an 'else'
    //do something else
  }
}

【问题讨论】:

  • 它几乎是直接从C syntax for switch statements 提升而来的,主要区别在于在C 中你只能在常量表达式上使用switch。它与 Python 无关,它甚至没有 具有 switch 语句。你提出的语法看起来不错,但他们目前不会改变它(大约 25 年)。
  • 类似于labels and continue
  • 另外我假设你的意思是case('bar')
  • 你的想法是函数的定义,我不确定但整个语言使用相同的 switch 语法,解释器或编译器在阅读代码时必须确切知道它是什么,而你的想法是函数定义,他们有定义功能或开关块。

标签: javascript typescript syntax


【解决方案1】:

您实际上可以在 JavaScript/TypeScript switch case 语句中使用花括号,这与您在问题中所写的类似。

switch(foo){
  case(bar): {
    //do something
  }

  case(bizz): {
    //do something
  }
  default: {               
    //do something else
  }
}

这实际上在每个案例中创建了一个块范围的语句,它允许您在每个案例中定义本地 letconst

【讨论】:

    【解决方案2】:

    因为 Switch/Case 语法也是:

    switch(foo){
    
      case 'bar':
      case 'bizz':
        //do something for both
        break;
    
      default:
        //do something else
        break;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多