Von MDN
Wenn eine Übereinstimmung gefunden wird, führt das Programm die zugehörigen Anweisungen. Wenn mehrere Fälle mit dem angegebenen Wert übereinstimmen, wird der erste übereinstimmende Fall ausgewählt, auch wenn die Fälle nicht gleich sind.
Die optionale break-Anweisung, die jedem case-Label zugeordnet ist, stellt sicher, dass das Programm nicht mehr wechselt, sobald die übereinstimmende Anweisung ausgeführt wird, und die Ausführung beim folgenden Anweisungsschalter fortgesetzt wird. Wenn break weggelassen wird, setzt das Programm die Ausführung bei der nächsten Anweisung in der switch-Anweisung fort.
So die grundlegende Geschichte über Schalter ist es von C entstanden und ist eine Abstraktion von branch table und eine Verzweigungstabelle hat auch einen impliziten Durchfall und erfordert einen zusätzlichen Sprungbefehl zu vermeiden. Auch alle anderen geerbten Sprachen wechseln als Standard-C-Switch-Semantik und entscheiden sich hauptsächlich dafür, die C-Semantik standardmäßig beizubehalten. Also in Ihrem Schalter, wenn Pause in allen Fällen weggelassen wird, wenn die Übereinstimmung gefunden wird, wird die Ausführung für die nächste Anweisung fortgesetzt. Es gibt den Schalter nicht aus, nachdem die Übereinstimmung gefunden wurde. Stattdessen wertet es alle anderen Fälle unter dem übereinstimmenden Fall aus. als Parser denkt, dass Fälle kombiniert sind, da zwischen ihnen keine Pause besteht. Ich habe Ihren Code ein bisschen für eine klare Erklärung dieses Verhaltens geändert. Im Fall A Pause wird weggelassen.
var dna = "ATTGC";
var outArr = [];
dna.split("").forEach(function(e,i){
switch(e) {
case "G": outArr[i] = "C"; break;
case "T": outArr[i] = "A"; break;
case "A": outArr[i] = "T";
case "C": outArr[i] = "G"; break;
}
console.log(outArr);
})
So wird Ihre Leistung wie sein
["G"]
["G", "A"]
["G", "A", "A"]
["G", "A", "A", "C"]
["G", "A", "A", "C", "G"]
In ersten Iteration Spiel Fall sein wird A.
outArr={'T'}
Wieder Da es keine Pause Aussage, es wird Fall C als selber Block betrachten und weiterhin dort Ausführung. Jetzt
outArr={'G'}
Similalrly in der zweiten Iteration passt es für Fall T aber es gibt eine Pause Aussage so Kontrollen aus dem Schalter und outarr springt nun
outArr={'G','A'}
Ähnliches gilt für andere Iterationen Sie erhalten die gesamte Ausgabe wie oben beschrieben.
Aktualisiert Bin here
Die 'Schalter ... case' Aussage ist so ausgelegt, dass, wenn Sie die' break' Anweisung weglassen, die Auswertung der Bedingung „fällt durch“ nach unten den verschiedenen Fällen. Was Sie also sehen, wenn Sie "Pause" weglassen, ist die Bedingung, die bis zum letzten Fall passt. –
Es ist nicht so, dass der letzte Fall wahr ist, sondern dass jeder Fall ein Eintrittspunkt ist, nach dem alle Anweisungen bis zum Ende des 'switch' Blocks ausgeführt werden. – shmosel
Zusätzlich zu was jeyoung hat kommentiert. Die 'Pause;' ist aus einem guten Grund da, wenn du dasselbe für verschiedene Fälle machen willst, kannst du es tun und es bricht damit, dass es passiert. –