switch...case 与 if...else 的性能分析

Posted 我要出家当道士

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了switch...case 与 if...else 的性能分析相关的知识,希望对你有一定的参考价值。

switch...case 与 if...else的根本区别在于,switch...case 会生成一个跳转表来指示实际的 case 分支的地址,而这个跳转表的索引号与 switch 变量的值是相等的。从而,switch...case 不用像 if...else 那样遍历条件分支直到命中条件,而只需访问对应索引号的表项从而到达定位分支的目的。

1.当分支较多时,当时用 switch 的效率是很高的。因为 switch 是随机访问的,就是确定了选择值之后直接跳转到那个特定的分支,但是 if else 是遍历所以得可能值,知道找到符合条件的分支。如此看来,switch 的效率确实比 if else 要高的多。

2.由上面的汇编代码可知道,switch...case 占用较多的代码空间,因为它要生成跳表,特别是当 case 常量分布范围很大但实际有效值又比较少的情况,switch...case 的空间利用率将变得很低。

3.switch...case 只能处理 case 为常量的情况,对非常量的情况是无能为力的。例如 if (a > 1 && a < 100),是无法使用 switch...case 来处理的。所以,switch 只能是在常量选择分支时比 if else 效率高,但是 if else 能应用于更多的场合,if else 比较灵活。

参考:https://zhuanlan.zhihu.com/p/149090160

以上是关于switch...case 与 if...else 的性能分析的主要内容,如果未能解决你的问题,请参考以下文章

if else与switch case

JS入门基础(if else 与 switch case / node安装)

if else和switch case那个效率更高一点

switch case vs if else [重复]

分支语句 if...else switch..case...break

使用对象代替复杂的if else,switch case