在 switch / case 语句中用大括号括起每个 case 是否是 ECMAScript 中的有效语法?

Is it valid syntax in ECMAScript to surround each case in a switch / case statement with curly braces?

我对 JavaScript 中 switch/case 语句的格式设置从来都不满意。鉴于以下内容:

switch (myVariable) {

  case ('a'):
  console.log('apple');
  break;

  case ('b'):
  console.log('banana');
  break;

  case ('c'):
  console.log('cherry');
  break;

  default:
  console.log('pineapple);
}

我觉得 case 声明后的行 应该 缩进。

但是如果它们 缩进的,那么最后一个 case 的最后一行和 [= 的结束花括号之间会有一个看起来很奇怪的两列间隙12=]块。

我刚刚想到我可以将每个 case 的代码括在它们自己的花括号中。

我怀疑这可能是无效,但我的浏览器对此很满意,Prettier 对此很满意,令人惊讶的是,甚至 JSHint 也对这种格式感到满意。

这是我所描述的示例:

switch (myVariable) {

  case ('a'): {
    console.log('apple');
    break;
  }

  case ('b'): {
    console.log('banana');
    break;
  }

  case ('c'): {
    console.log('cherry');
    break;
  }

  default: {
    console.log('pineapple);
  }
}

这种格式可以在不引入两列间隙的情况下实现代码缩进。

但这肯定不是有效的 ECMAScript 语法,对吧?

在语法中,单个“case”称为 CaseClause。 CaseClause 由以下部分组成:

case Expression: StatementList

一个语句列表is composed of一个语句列表项。

一个 StatementListItem is either 一个语句或声明。

一个语句may be一个块语句。

块语句是 a plain block - 这是一个包含语句列表的块:

{ StatementList }

是的,这是有效的语法。