Javascript switch vs. if...否则,如果...还

2022-08-30 02:01:23

伙计们,我有几个问题:

  1. 在 JavaScript 中,语句和 ?switchif...else
  2. 如果是,为什么?
  3. 浏览器的行为和浏览器的行为是否不同?(FireFox, IE, Chrome, Opera, Safari)switchif...else

提出这个问题的原因是,似乎我在Firefox中大约有1000个案例的陈述上得到了更好的表现。switch


编辑不幸的是,这不是我的代码,Javascript是从编译的库在服务器端生成的,我无法访问代码。生成 javascript 的方法称为

CreateConditionals(string name, string arrayofvalues, string arrayofActions)

注释是一个逗号分隔的列表。arrayofvalues

它产生的是

function [name] (value) {
  if (value == [value from array index x]) {
     [action from array index x]
  }
}

注意:其中 = 传入服务器端函数的名称[name]

现在,我更改了要插入到 TextArea 中的函数的输出,编写了一些 JavaScript 代码来解析该函数,并将其转换为一组语句。case

最后,我运行该函数,它运行良好,但在IE和Firefox中性能不同。


答案 1

一般回答:

  1. 是的,通常。
  2. 在此处查看更多信息
  3. 是的,因为每个都有不同的JS处理引擎,但是,在下面的站点上运行测试时,交换机总是执行if,否则在大量迭代中。

测试站点


答案 2

有时最好什么都不使用。例如,在“调度”情况下,Javascript允许您以完全不同的方式做事:

function dispatch(funCode) {
  var map = {
    'explode': function() {
      prepExplosive();
      if (flammable()) issueWarning();
      doExplode();
    },

    'hibernate': function() {
      if (status() == 'sleeping') return;
      // ... I can't keep making this stuff up
    },
    // ...
  };

  var thisFun = map[funCode];
  if (thisFun) thisFun();
}

通过创建对象来设置多路分支有很多优点。您可以动态添加和删除功能。您可以从数据创建调度表。您可以通过编程方式对其进行检查。您可以使用其他函数生成处理程序。

为了获得等效的“case”,函数调用增加了开销,但是哈希查找以查找特定键的函数的优点(当有很多情况时)。