JavaScript applications consist of statements with an appropriate syntax. A single statement may span multiple lines. Multiple statements may occur on a single line if each statement is separated by a semicolon. This isn't a keyword, but a group of keywords.
Statements and declarations by category
For an alphabetical listing see the sidebar on the left.
Control flow
Block- A block statement is used to group zero or more statements. The block is delimited by a pair of curly brackets.
break- Terminates the current loop, switch, or label statement and transfers program control to the statement following the terminated statement.
continue- Terminates execution of the statements in the current iteration of the current or labeled loop, and continues execution of the loop with the next iteration.
Empty- An empty statement is used to provide no statement, although the JavaScript syntax would expect one.
if...else- Executes a statement if a specified condition is true. If the condition is false, another statement can be executed.
switch- Evaluates an expression, matching the expression's value to a case clause, and executes statements associated with that case.
throw- Throws a user-defined exception.
try...catch- Marks a block of statements to try, and specifies a response, should an exception be thrown.
Declarations
var- Declares a variable, optionally initializing it to a value.
let- Declares a block scope local variable, optionally initializing it to a value.
const- Declares a read-only named constant.
Functions and classes
function- Declares a function with the specified parameters.
function*- Generator Functions enable writing iterators more easily.
async function- Declares an async function with the specified parameters.
return- Specifies the value to be returned by a function.
class- Declares a class.
Iterations
do...while- Creates a loop that executes a specified statement until the test condition evaluates to false. The condition is evaluated after executing the statement, resulting in the specified statement executing at least once.
for- Creates a loop that consists of three optional expressions, enclosed in parentheses and separated by semicolons, followed by a statement executed in the loop.
for each...in- Iterates a specified variable over all values of object's properties. For each distinct property, a specified statement is executed.
for...in- Iterates over the enumerable properties of an object, in arbitrary order. For each distinct property, statements can be executed.
for...of- Iterates over iterable objects (including arrays, array-like objects, iterators and generators), invoking a custom iteration hook with statements to be executed for the value of each distinct property.
for await...of- Iterates over async iterable objects, array-like objects, iterators and generators, invoking a custom iteration hook with statements to be executed for the value of each distinct property.
while- Creates a loop that executes a specified statement as long as the test condition evaluates to true. The condition is evaluated before executing the statement.
Others
debugger- Invokes any available debugging functionality. If no debugging functionality is available, this statement has no effect.
export- Used to export functions to make them available for imports in external modules, and other scripts.
import- Used to import functions exported from an external module, another script.
import.meta- A meta-property exposing context-specific metadata to a JavaScript module.
label- Provides a statement with an identifier that you can refer to using a
breakorcontinuestatement.
with- Extends the scope chain for a statement.
Specifications
| Specification |
|---|
| ECMAScript Latest Draft (ECMA-262) The definition of 'ECMAScript Language: Statements and Declarations' in that specification. |
Browser compatibility
Update compatibility data on GitHub
| No | No | 2 — 58 | No | No | No | No | No | 4 — 58 | No | No | No | No |
| 55 | 15 | 52 | No | 42 | 10.1 | 55 | 55 | 52 | 42 | 10.3 | 6.0 | 7.6.0 |
| 1 | 12 | 1 | 11 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 1 | 12 | 1 | 3 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
|
49 | 13 | 45 | No | 36 | 10.1 |
49 |
49 | 45 | ? | 10.3 |
4.0 | 6.0.0 |
| 21 | 12 |
36 | 11 | Yes | 5.1 | ≤37 | 25 |
36 | Yes | 6 | Yes | Yes |
| 1 | 12 | 1 | 3 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 5 | 12 | 1 | 4 | Yes | 5 | 1 | 18 | 4 | Yes | 4.2 | 1.0 | Yes |
| 1 | 12 | 1 | 4 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 3 | 12 | 1 | 3 | Yes | 5 | 1 | 18 | 4 | Yes | 4.2 | 1.0 | Yes |
| 61 | 16 | 60 | No | 47 | 10.1 | No | 61 | 60 | 44 | 10.3 | 8.0 |
8.5.0 |
| 1 | 12 | 1 | 3 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 63 | No | 57 | No | 50 | 11 | 63 | 63 | 57 | 46 | 11 | 8.0 | 10.0.0 |
| No | No | 1.5 — 57 | No | No | No | No | No | 4 — 57 | No | No | No | No |
| 49 | 12 | 1 | 6 | 36 | 7 | 49 | 49 | 4 | 36 | 7 | 5.0 | Yes |
| 38 | 12 |
13 | No | 25 | 7 | 38 | 38 |
14 | 25 | 7 | Yes | Yes |
| 1 | 12 | 1 | 3 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 39 | 13 | 26 | No | 26 | 10 | 39 | 39 | 26 | Yes | 10 | 4.0 | 4.0.0 |
| 1 | 12 | 1 | 3 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 61 | 16 | 60 | No | 47 | 10.1 | 61 | 61 | 60 | 44 | 10.3 | 8.0 |
8.5.0 |
| 64 | No | 62 | No | 51 | 11.1 | 64 | 64 | 62 | 47 | 12 | 9.0 | ? |
| 1 | 12 | 1 | 4 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 49 | 14 |
44 |
11 | 17 | 10 | 49 | 49 |
44 | 18 | 10 | 5.0 | 6.0.0 |
| 1 | 12 | 1 | 3 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 1 | 12 | 1 | 4 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 1 | 12 | 1 | 5 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 1 | 12 | 1 | 5 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 1 | 12 | 1 | 3 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 1 | 12 | 1 | 3 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
| 1 | 12 | 1 | 3 | Yes | 1 | 1 | 18 | 4 | Yes | 1 | 1.0 | Yes |
Legend
- Full support
- Partial support
- No support
- Compatibility unknown
- Non-standard. Expect poor cross-browser support.
- Deprecated. Not for use in new websites.
- See implementation notes.
- User must explicitly enable this feature.
