Dies ist sehr ähnlich zu default as first option in switch statement?, aber in Bezug auf JS statt PHP.Javascript switch statement - Standard zuerst OK?
Ich habe eine Hilfsfunktion, die verschiedene Aufrufstile für eine andere Funktion umschließt. Die umbrochene Funktion benötigt mindestens eine und kann bis zu 4 Parameter akzeptieren. Was ich gerade mache, wird in diesem Code-Beispiel, das in meinen Versionen von Chrome und FF funktioniert, ziemlich gut beschrieben.
function testSwitch(definition) {
var term, minLength, boundaryStart, boundaryEnd;
switch (definition.length) {
default:
case 4:
boundaryEnd = definition[3];
case 3:
boundaryStart = definition[2];
case 2:
minLength = definition[1];
case 1:
term = definition[0];
break;
case 0:
console.log('fail')
return;
}
console.log(term, minLength, boundaryStart, boundaryEnd);
}
(Im realen Anwendungsfall werden sie an die eigentliche Funktion statt console.log übergeben). Die Idee ist also, durch die Fälle zu gehen, so dass zu viele Parameter bereitgestellt werden können (aber die zusätzlichen ignoriert werden), aber fehlgeschlagen, wenn die angegebene Definition leer ist.
Also weiß ich aus meinen Tests, dass dies zumindest in einigen Browsern funktioniert, kann ich mich darauf verlassen, dass dies über relativ neue Browser funktioniert (z. B. iOS/Android-Geräte, IE8 +, Edge usw.)? Ich weiß, dass das Ausschließen der break-Anweisung wohldefiniertes Verhalten ist und ziemlich breit verwendet wird, bin aber nicht so sicher, ob der Standardfall zuerst und leer ist (zB wenn einige Browser-JS-Engines den leeren Standardfall optimieren würden, tut dies nicht) arbeite für mich, da es bei einem Aufruf mit einem Array der Größe 5 nicht funktionieren würde).
Ihr Szenario auf Firefox funktioniert für mich 48. Ich denke, es sollte auf alle JS arbeiten Ich glaube nicht, dass eine JS-Engine den 'default'-Fall optimieren würde, da dies den Kontrollfluss definitiv ändern würde. – Xufox