Warum unterscheidet sich der „let“-Lookahead zwischen for-in- und for-of-Schleifen in ECMAScript?
Posted: 06 Jan 2025, 21:01
Die ForInOfStatement-Produktion in der Spezifikation für ECMAScript ist für die Fälle, über die ich verwirrt bin, wie folgt definiert:
Ignorieren Sie den „async of“-Unterschied, der bereits gut dokumentiert ist.
Warum gibt es einen Unterschied zwischen let und let? [ negativer Lookahead?
Das for-in hat let [ als negativen Lookahead, ich gehe davon aus, dass diese Syntax nicht durch die obige Zeile abgedeckt wird:< /p>
Wenn dies durch die obige Zeile abgedeckt wäre, würde es bedeuten: „Weisen Sie den Schlüssel von [1] zu (let)[a]“.
Stattdessen wird diese Syntax durch eine andere Zeile abgedeckt, die sie zu einer let-Deklaration mit einem Array-Zerstörungsmuster macht.
Was Sinn macht.Dies wird durch die obige Zeile im For-In abgedeckt und ist gültig Fall:
D.h. Weisen Sie let.a den Schlüssel von [1] zu.
Dies ist jedoch für den for-of-Fall nicht zulässig:
Firefox sagt:
Uncaught SyntaxError: an expression X in 'for (X of Y)' darf nicht beginnen mit 'let'
Node und Chrome sagen:
SyntaxError: The left -Hand-Seite einer for-of-Schleife darf nicht mit beginnen 'let'.
Es muss etwas mehr Eindeutigkeit für die for-of-Schleife geben, die die Einschränkungen für diese Schleife erweitert. Was ist diese Eindeutigkeit?< /P>
Code: Select all
for ( [lookahead ≠ let [] LeftHandSideExpression in Expression ) Statement
for ( [lookahead ∉ { let, async of }] LeftHandSideExpression of AssignmentExpression )
Warum gibt es einen Unterschied zwischen let und let? [ negativer Lookahead?
Das for-in hat let [ als negativen Lookahead, ich gehe davon aus, dass diese Syntax nicht durch die obige Zeile abgedeckt wird:< /p>
Code: Select all
for (let[a] in [1]) ;
Stattdessen wird diese Syntax durch eine andere Zeile abgedeckt, die sie zu einer let-Deklaration mit einem Array-Zerstörungsmuster macht.
Was Sinn macht.Dies wird durch die obige Zeile im For-In abgedeckt und ist gültig Fall:
Code: Select all
for (let.a in [1]) ;
Dies ist jedoch für den for-of-Fall nicht zulässig:
Code: Select all
for (let.b of [1]) ;
Uncaught SyntaxError: an expression X in 'for (X of Y)' darf nicht beginnen mit 'let'
Node und Chrome sagen:
SyntaxError: The left -Hand-Seite einer for-of-Schleife darf nicht mit beginnen 'let'.
Es muss etwas mehr Eindeutigkeit für die for-of-Schleife geben, die die Einschränkungen für diese Schleife erweitert. Was ist diese Eindeutigkeit?< /P>