2017-10-02 1 views
2

ich nicht in eine allgemeine Suche im Internet finden konnte, noch durch die manual Lesen warum nicht möglich ist, diesen Code zu verwenden:Kann verwenden `throw` nicht nach oder Operator (||)

let a; 
a || throw Error(`'a' is undefined or falsy`); 

ich SyntaxError: Unexpected token throw .

Weiß jemand, warum ist es nicht möglich, diesen Weg zu verwenden, um einen Wurf zu codieren?

+3

Könnte 'a || throwError ('' 'a' ist undefined oder falsy''); function throwError (e) {throw Fehler (e)} '- Hier ist ein [** Beispiel **] (https://jsfiddle.net/qqsbtuz3/1/) ** EDIT: ** Ich habe eine verdammt gute Zeit versucht um dem zu entkommen, aber hoffentlich bekommst du es. – Santi

+0

Schöne @Santi, ich werde so etwas verwenden, bis die von ellisbben hervorgehobenen Proposals-throw-Ausdrücke zur Stage 4 werden oder in Nodejs ohne Flags landen. – FLC

Antwort

6

Das Schlüsselwort throw zeigt einen Wurf Anweisung an, was bedeutet, dass es eine Aussage sein muss.

Die Teile auf der linken und rechten Seite des || Operators können nur Ausdrücke sein, nicht Statements.

Siehe ECMAScript Grammatik auf Statement Semantics

2

-Code wie a || b ein Ausdruck ist; Es ist Code, der letztlich zu einem Wert auswertet.

Im heutigen JavaScript ist throw eine Anweisung; Code, der Nebenwirkungen haben kann, aber keinen Wert hat. Dies kann sich in Zukunft ändern: vgl. https://github.com/tc39/proposal-throw-expressions.

Verwandte Themen