Javascript - Statement

> (World Wide) Web - (W3|WWW) > Javascript (Js|ECMAScript) > ECMAScript - Grammar Standard

1 - About

An expression produces a value whereas a statement will not.

Advertising

3 - Syntax

All statements in JavaScript must end with a semi-colon, to indicate that this is where the statement ends.

The parser may add semicolon if it encounter a parse error. See below Automatic semicolon insertion

4 - Example

The statement

b
(2);

is equivalent to

b(2);

5 - Automatic semicolon insertion

Ther parser infers omitted semicolons in certain contexts, effectively “inserting” the missing semicolon into the program for you automatically. The ECMAScript standard precisely specifies the semicolon insertion mechanism.

5.1 - Parse Error correction

Parser Rules:

  1. Semicolons are only ever inserted before a } token, after one or more newlines, or at the end of the program input.
  2. Semicolons are only ever inserted when the next input token cannot be parsed. In other words, semicolon insertion is an error correction mechanism.

To avoid an unwanted automatic semicolon insertion problem, you can prefix statements beginning with (, [, +, -, or / with an extra semicolon.

Except that semicolons are never inserted as separators in the head of a for loop or as empty statements.

Advertising

5.2 - Restricted production

Where no newline is allowed to appear between two tokens, Javascript will insert a semicolon thanks to the restricted productions

The restricted productions are:

  • throw
  • break or continue statement with an explicit label
  • a postfix ++ or -- operator
  • return

Example with:

  • return:

function returnValueOnSameLine(){
    return 4;
}
 
function returnValueOnNextLine(){
    return // The javascript parser will add here a semicolon because the return keyword is not allowed to spread on multi-line.
    4;
}
 
console.log(returnValueOnSameLine());
console.log(returnValueOnNextLine());

  • Postfix. ++ (or %–%) can serve as either a prefix or a suffix, but only the suffix cannot be preceded by a newline.

a=0;
b=0;
 
a
// As the suffix cannot be preceded by a new line, ++ will be a prefix and the parser add here a semicolon
++ 
b
 
console.log(a);
console.log(b);

Advertising

6 - Documentation / Reference

web/javascript/es/statement.txt · Last modified: 2019/02/16 17:40 by gerardnico