Der Inhalt dieses Artikels ist eine Einführung in die Javascript-Semikolonregeln (mit Beispielen). Ich hoffe, er wird Ihnen als Referenz dienen.
Nehmen Sie sich etwas Zeit, um die Semikolon-Regeln in JS herauszufinden~~~Ob Ihnen der Modus mit einem Semikolon am Ende gefällt oder das Semikolon weggelassen wird
Szenarien, in denen Semikolons erlaubt sind
Semikolons dürfen im Allgemeinen am Ende der meisten Anweisungen stehen, wie z. B. do-while-Anweisungen, var-Anweisungen, Ausdrucksanweisungen, continue, return, break-Anweisungen, throw, Debugger usw.
Chestnut:
do Statement while ( Expression ) ; 4+4; f(); debugger;
hat nur ein Semikolon; es kann eine leere Anweisung darstellen – es ist in JS zulässig. Beispielsweise kann ;;;
in drei leere Anweisungen (leere Anweisung) analysiert werden.
Die leere Anweisung kann zur Unterstützung bei der Generierung einer legalen Syntax verwendet werden. Das Parsing-Ergebnis, zum Beispiel:
while(1);
Wenn am Ende kein Semikolon steht, tritt ein Parsing-Fehler auf – auf die Bedingungsschleife muss eine Anweisung
folgenDas Semikolon erscheint auch in der for-Schleife für die Anweisung (Ausdruck; Ausdruck; Ausdruck)
Schließlich erscheint das Semikolon auch in einer Zeichenfolge oder einem regulären Ausdruck – was auf das Semikolon selbst hinweist
Szenarien, in denen das Semikolon weggelassen werden kann
In einigen Szenarien kann das Semikolon beim Parsen der Anweisung automatisch eingefügt werden:
Schreiblich weggelassen => Wenn der Parser beim Parsen feststellt, dass es fehlt, kann es nicht korrekt analysiert werden => Semikolons automatisch hinzufügen
also Es ist notwendig, die Szenarien zu klären, in denen Semikolons automatisch eingefügt werden können , und klären Sie die Situationen, in denen Semikolons nicht automatisch eingefügt werden und Analysefehler verursachen
Regel 1: Wenn das nächste Token (anstößiges Token) und das aktuell analysierte Token (vorheriges Token) keine rechtliche Aussage bilden können, und Wenn eine oder mehrere der folgenden Bedingungen erfüllt sind, wird vor dem fehlerhaften Token ein Semikolon eingefügt:
UpdateExpression[Yield, Await]: LeftHandSideExpression[?Yield, ?Await] [no LineTerminator here] ++ LeftHandSideExpression[?Yield, ?Await] [no LineTerminator here] -- ContinueStatement[Yield, Await]: continue; continue [no LineTerminator here] LabelIdentifier[?Yield, ?Await]; BreakStatement[Yield, Await]: break; break [no LineTerminator here] LabelIdentifier[?Yield, ?Await]; ReturnStatement[Yield, Await]: return; return [no LineTerminator here] Expression [+In, ?Yield, ?Await]; ThrowStatement[Yield, Await]: throw [no LineTerminator here] Expression [+In, ?Yield, ?Await]; ArrowFunction[In, Yield, Await]: ArrowParameters[?Yield, ?Await] [no LineTerminator here] => ConciseBody[?In] YieldExpression[In, Await]: yield [no LineTerminator here] * AssignmentExpression[?In, +Yield, ?Await] yield [no LineTerminator here] AssignmentExpression[?In, +Yield, ?Await]
// 相当于 42;"hello" 42 "hello" // offending token 是 } if(x){y()} // previous token 是 ) 且插入分号是 do while 语句的结束 var a = 1 do {a++} while(a<100) console.log(a) // 不会解析成 b++ 因为 b和++之间存在换行符,会在 b 之后自动插入分号 a = b ++c
const hey = 'hey' const you = 'hey' const heyYou = hey + ' ' + you ['h', 'e', 'y'].forEach((letter) => console.log(letter))
const hey = 'hey'; const you = 'hey'; const heyYou = hey + ' ' + you['h', 'e', 'y'].forEach((letter) => console.log(letter))
const a = 1 const b = 2 const c = a + b (a + b).toString()
-Fehler. weil es interpretiert wird als: TypeError: b is not a function
const a = 1 const b = 2 const c = a + b(a + b).toString()
if (a > b) else c = d for (a; b )
// for循环没有循环体的情况,每一个分号都不能省略 for (node=getNode(); node.parent; node=node.parent) ;
var // 这一行不会插入分号 ,因为 下一行的代码不会破坏当前行的代码 a = 1 // 这一行会插入分号 let b = 2 // 再比如这种情况,你的原意可能是定义 `a` 变量,再执行 `(a + 3).toString()`, // 但是其实 JavaScript 解析器解析成了,`var a = 2(a + 3).toString()`, // 这时会抛出错误 Uncaught TypeError: 2 is not a function var a = 2 (a + 3).toString() // 同理,下面的代码会被解释为 `a = b(function(){...})()` a = b (function(){ ... })()
(() => { return { color: 'white' } })()
(() => { return { color: 'white' } })()
不要使用以下单个字符 ( [ / + - 开始一行 , 会极有可能和上一行语句合在一起被解析( ++ 和 -- 不符合单个 +、- 字符)
注意 return break throw continue 语句,如果需要跟随参数或表达式,把它添加到和这些语句同一行,针对 return 返回内容较多的情况 (大对象,柯里化调用,多行字符串等),可以参考规则1,避免命中该规则而引起非预期的分号插入,比如:
return obj.method('abc') .method('xyz') .method('pqr') return "a long string\n" + "continued across\n" + "several lines" totalArea = rect_a.height * rect_a.width + rect_b.height * rect_b.width + circ.radius * circ.radius * Math.PI
当然大部分工程化情况下,我们最终会配合Eslint使用带分号或省略分号规范~~~
本篇文章到这里就已经全部结束了,更多其他精彩内容可以关注PHP中文网的JavaScript视频教程栏目!
Das obige ist der detaillierte Inhalt vonEinführung in die Kenntnisse der Javascript-Semikolonregeln (mit Beispielen). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!