没有中断的 TypeScript 枚举 switch 语句
TypeScript enum switch statement without break
如果我没理解错的话,下面签名的switch语句执行:
switch (key) {
case value:
break;
default:
break;
}
如下:
- 如果大小写值与键匹配
- 执行里面的代码
- 如果 return 或发现中断
- 退出开关
- 否则评估下一个案例
- 否则评估下一个案例
因为 TypeScript 在我省略 break 时不会报错,所以我假设 switch 语句的工作方式类似于 if 语句;如果条件为真,if 语句中的代码就会执行。
但是如果我省略中断,下面的示例代码将打印出所有 3 个案例,即使案例并非全部正确。
enum SomeEnum {
a = 'a',
b = 'b',
c = 'c',
}
doSomething(SomeEnum.a)
function doSomething(s: SomeEnum) {
switch (s) {
case SomeEnum.a:
console.log(1)
break
case SomeEnum.b:
console.log(2)
break
case SomeEnum.c:
console.log(3)
break
default:
break
}
}
所以,我想我在这里误解了什么,但搜索这个问题没有产生任何结果。如果有人能对此有所说明,我将不胜感激。
switch
语句运行第一个匹配项中的所有代码。当它找到匹配项时,它不会检查其他情况。例如,如果您传递 a
,它将记录 1
、2
和 3
。如果你通过了b
。它将 return 2
和 3
。它会继续进行,只会省略匹配之前的代码。 break
告诉您的 switch 语句它可以停在那里。它的工作原理类似于 return
.
它不像 if-statement
它更像:
if (SomeEnum.a) {
... run this code and all other code after it.
}
if (SomeEnum.b) {
... run this code and all other code after it
}
...
如果我没理解错的话,下面签名的switch语句执行:
switch (key) {
case value:
break;
default:
break;
}
如下:
- 如果大小写值与键匹配
- 执行里面的代码
- 如果 return 或发现中断
- 退出开关
- 否则评估下一个案例
- 否则评估下一个案例
因为 TypeScript 在我省略 break 时不会报错,所以我假设 switch 语句的工作方式类似于 if 语句;如果条件为真,if 语句中的代码就会执行。
但是如果我省略中断,下面的示例代码将打印出所有 3 个案例,即使案例并非全部正确。
enum SomeEnum {
a = 'a',
b = 'b',
c = 'c',
}
doSomething(SomeEnum.a)
function doSomething(s: SomeEnum) {
switch (s) {
case SomeEnum.a:
console.log(1)
break
case SomeEnum.b:
console.log(2)
break
case SomeEnum.c:
console.log(3)
break
default:
break
}
}
所以,我想我在这里误解了什么,但搜索这个问题没有产生任何结果。如果有人能对此有所说明,我将不胜感激。
switch
语句运行第一个匹配项中的所有代码。当它找到匹配项时,它不会检查其他情况。例如,如果您传递 a
,它将记录 1
、2
和 3
。如果你通过了b
。它将 return 2
和 3
。它会继续进行,只会省略匹配之前的代码。 break
告诉您的 switch 语句它可以停在那里。它的工作原理类似于 return
.
它不像 if-statement
它更像:
if (SomeEnum.a) {
... run this code and all other code after it.
}
if (SomeEnum.b) {
... run this code and all other code after it
}
...