JavaScript性能开关(整数)与开关(字符串)
我来自C#,在那里,两者之间有着巨大的差异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
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;
}