JavaScript性能开关(整数)与开关(字符串)

JavaScript性能开关(整数)与开关(字符串),javascript,performance,enums,integer,switch-statement,Javascript,Performance,Enums,Integer,Switch Statement,我来自C#,在那里,两者之间有着巨大的差异 A: 和B: var intVal = 1; switch (intVal) { case 0 : break; case 1 : break; } B在C#中快得多(因为字符串开关将从编译器转换为if-else结构) 它在JavaScript中类似吗?(当然JS中只有数字类型) 而且-为了可读性-如果我想在JS(如本文所述)中与一些枚举“等效”一起使用它,那么在使用 var caseEnum = { firs

我来自C#,在那里,两者之间有着巨大的差异
A:


B:

var intVal = 1;
switch (intVal)
{
    case 0 :
    break;
    case 1 :
    break;
}
B在C#中快得多(因为字符串开关将从编译器转换为if-else结构)

它在JavaScript中类似吗?(当然JS中只有数字类型)

而且-为了可读性-如果我想在JS(如本文所述)中与一些枚举“等效”一起使用它,那么在使用

var caseEnum = {
    firstCase : 0,
    secCase : 1
}

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

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

它在JavaScript中类似吗?(当然JS中只有数字类型)

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

这是主要的区别

一个非常详细的解释在

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


。。。是否有绩效改进


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

我自己做了一个令人难以置信的丑陋测试
查看:

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

顺便说一句,另一个暗示是,边缘和IE是荒谬的。
我想结果真的很有趣。
(我知道这类“测试”并不那么准确,但我认为它们可以给出一个提示)

看起来,编译器注意到了带有整数的开关,但影响不大

铬:

firefox:

边缘:

IE:

“它在JavaScript中类似吗?”取决于解释器的实现。使用整数可能更快,但JIT是一件神秘的事情。如果有疑问,请使用profile.yes,但是在javascript中使用带整数的switch时是否也有性能提升?那么,使用Integer有意义吗?最快的方法是不使用它们。散列比所有的都快得多。|非常有帮助和有趣的时间比较,谢谢!
var caseEnum = {
    firstCase : 0,
    secCase : 1
}

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