Wie andere oben erwähnt haben, müssen Sie, wenn Sie kein Fehlerobjekt werfen, Try / Catch-Blöcke haben, um diese Objekte abzufangen und angemessen zu behandeln, oder sich in einer Welt voller Verletzungen beim Debuggen befinden.
Wenn es jedoch darum geht, Fehler für nicht fehlerbehandelte Zwecke wie die Steuerung des Programmflusses auszulösen, kann dies eine hilfreiche Methode sein, um sie throwfehlerfrei zu verwenden.
Wenn Sie zur Steuerung des Programmflusses Throws verwenden, kann dies in jeder Sprache ineffizient sein, da die Laufzeit häufig viel Aufwand erfordert, um die Informationen zum Aufrufstapel abzuwickeln und die Daten so zu serialisieren, dass sie dem Benutzerbereich zur Verfügung stehen. Indem Sie die Fehlererstellung vermeiden, können Sie diesen Leistungseinbruch vermeiden. Der Schlüssel ist, dass Sie einen Handler im Aufrufstapel haben müssen, der weiß, wie man mit dieser Situation umgeht. Wenn Sie beispielsweise throw {isHardStop: true, stopCode: SOME_CODE}die Handler so gestalten, dass dies erkannt wird, können Sie möglicherweise einen Teil Ihres Codes reduzieren oder eine sauberere Syntax wählen.
Ihr Handler für diesen Leiterfall könnte wie folgt aufgebaut sein:
try { ... } catch(thr) {
if(!thr){
} else if(thr.isHardStop){
} else {
}
}