JavaScript性能开关(整数)与开关(String)

时间:2016-01-02 22:09:08

标签: javascript performance enums integer switch-statement

我来自C#,它之间有很大不同 答:

var stringVal = "1";
switch (stringVal)
{
    case "0" :
    break;
    case "1" :
    break;
}

和b:

var intVal = 1;
switch (intVal)
{
    case 0 :
    break;
    case 1 :
    break;
}

B在C#中要快得多(因为String-Switch将从编译器转换为if-else-structure)。

它是否与JavaScript类似? (当然JS中只有数字类型)

并且 - 为了便于阅读 - 如果我想将它与一些枚举一起使用 - "相当于"在JS中(如此处所述http://stijndewitt.com/2014/01/26/enums-in-javascript/),在使用

时,无论如何都会提高性能
var caseEnum = {
    firstCase : 0,
    secCase : 1
}

var enumVal = caseEnum.secCase ;
switch (enumVal )
{
    case caseEnum.firstCase :
    break;
    case caseEnum.secCase :
    break;
}

(我知道我可以使用对象文字来做,但带整数的switch语句对我来说更自然)

2 个答案:

答案 0 :(得分:2)

我自己做了一个令人难以置信的丑陋测试 (look at: https://jsfiddle.net/PutziSan/kzdwt8u2

并在不同的浏览器上运行代码(结果如下),(所有浏览器今天都在最新版本上更新 - 2016年1月3日)

顺便提一下,那个边缘和IE只是荒谬可笑。 我猜测结果非常有趣 (我知道这种"测试"不是那么准确,但我认为他们可以给出一个暗示)

看来,编译器会注意到Integer的切换,但它没有那么大的影响。

铬:
chrome

火狐:
firefox

边缘:
edge

IE:
IE

答案 1 :(得分:0)

  

它是否与JavaScript类似? (当然,JS中只有数字类型)

在javascript中,表达式几乎可以是任何东西,它不像在编译期间验证类型的C,这里它是在“运行时”中计算的

这是主要区别。

非常详细的解释在MDN - Switch

  

... expression的计算结果与输入表达式
的结果相同    (使用严格比较,===

  

......无论如何都有性能提升

这取决于您的浏览器及其JS引擎。