Wieso denn so umständlich? Bei case 4 muss der JS-Interpreter immer noch fünf Vergleiche machen. Besser direkt in einem Array nachschlagen:
Das besser ist ein Trugschluß (dem ich auch schon unterlag), die Implemetierung der Hashes scheint nicht sonderlich schnell zu sein, der Vergleich mit einem integer ist auf jeden Fall schneler, als die Suche nach einem String (dem key des Objektes).
<script type="text/javascript" src="[link:http://javascript.jstruebig.de/javascript/368/@title=benchmark.js]"></script>
<script type="text/javascript">
function rand (min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
var test = {
'case': function() {
var punkte = rand(0, 4);
var x;
switch (punkte)
{
case 0: x = "sehr schlecht"; break;
case 1: x = "schlecht"; break;
case 2: x = "ganz oke"; break;
case 3: x = "gut"; break;
case 4: x = "sehr gut"; break;
}
},
'object': function() {
var bewertungen = ["sehr schlecht", "schlecht", "ganz oke", "gut", "sehr gut"];
var punkte = rand(0, 4);
var x = bewertungen[punkte];
}
};
Benchmark(50000, test, function(t) {alert(t);});
Ergibt bei mir (FF 3/2.6GHz):
JS Benchmark. Anzahl der Durchläufe: 50.000 ----------------------------------------
case:...............109ms = 458.715/sekunde......................... object:.............305ms = 163.934/sekunde.........................
Struppi.